天天看点

ssis 到别的表查找临时变量值

etl过程过,往一个数据库表插入数据,插入的值往往需要到另外一个数据库读取。例如下面的客户跟踪,需要一个“项目ID”,这个ID需要到另一个数据库的一张表查找,找到后返回给“客户跟踪”任务流。

ssis 到别的表查找临时变量值

执行SQL任务“原项目ID”的配置如下图:

ssis 到别的表查找临时变量值
ssis 到别的表查找临时变量值

sql语句是:

if exists(SELECT * FROM dbo.TB_BBProject WHERE (PJ_Name = @PJ_Name))

     SELECT top 1 PJ_ID FROM dbo.TB_BBProject WHERE (PJ_Name = @PJ_Name);

else

     select –1

如果直接写:SELECT top 1 PJ_ID FROM dbo.TB_BBProject WHERE (PJ_Name = @PJ_Name),当这个查询没有数据返回的时候,ssis就会报道如下错误:

            无法为单行结果类型填充结果列。查询返回了一个空的结果集

这是因为“结果集”设置成单行,ssis就要求必须返回一行,不允许空行。

保存结果的变量“原项目ID”的数据类型需要设置成“Object”,在其他地方使用的时候,ssis会自动转成int类型,见下图:

在“OLE DB 源数据源”中使用“原项目ID”

ssis 到别的表查找临时变量值

“OLE DB 源”需要的查询参数需要使用“select * from tableName where fieldName=?”,只有ADO NET源才可以使用@参数名但是感到奇怪的是“ADO NET 源”(如下图)查询居然不可以设置查询参数:

ssis 到别的表查找临时变量值