etl過程過,往一個資料庫表插入資料,插入的值往往需要到另外一個資料庫讀取。例如下面的客戶跟蹤,需要一個“項目ID”,這個ID需要到另一個資料庫的一張表查找,找到後傳回給“客戶跟蹤”任務流。

執行SQL任務“原項目ID”的配置如下圖:
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”
“OLE DB 源”需要的查詢參數需要使用“select * from tableName where fieldName=?”,隻有ADO NET源才可以使用@參數名但是感到奇怪的是“ADO NET 源”(如下圖)查詢居然不可以設定查詢參數: