2011-10-10 26 views
1

條件我已創建了一個SSIS包 我需要在產品運行下面的查詢我如何使用地方包變量在SSIS

Insert into mydata.dbo.MonthEndCDSSpreadCalc(Date,CompanyName) 
SELECT Date, CompanyName 
FROM  mydata.dbo.UpdateNAV 
WHERE  (Date = @[User::Date]) AND (PortfolioId = @[User::PortfolioId]) AND (SecurityType in (@[User::SecurityType])) 

但在上面,我在用戶變量得到錯誤放。 運行以上查詢到SQL Task 請告訴我如何正確使用它們?

回答

2

如果它應該是控制流內的任務,請使用ExecuteSQL任務。 如果它應該是數據流中的任務,請使用OleDbCommand。

另外,無論您選擇哪個,都應該更改查詢以使用適當的參數語法。查看BOL的ExecuteSQL任務和OleDbCommand的詳細說明。

例如,如果您在oledbcommand中使用oledb連接管理器您應該使用?因爲這是oledb參數佔位符:

Insert into mydata.dbo.MonthEndCDSSpreadCalc(Date,CompanyName) 
SELECT Date, CompanyName 
FROM  mydata.dbo.UpdateNAV 
WHERE  (Date = ?) AND (PortfolioId = ?) AND (SecurityType in ?) 

然後轉到參數選項卡並將參數映射到您的SSIS變量。請注意,SSIS會將您的SSIS變量按您列出的順序映射到查詢中的問號。

注意:如果你有很多行,這個包會非常慢。最好不要逐行處理,而是要改變你的包的邏輯,以便它能與集合一起工作(例如,在數據流中分配值並使用oledb目標將數據插入到MonthEndCDSSpreadCalc中)。