天天看點

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 到别的表查找臨時變量值