2010-08-19 31 views
1

我正在將Oracle數據導入到SQL Server中。在我的OLE DB源運行查詢以獲取要處理的數據之後,我試圖以某種方式調用某個字段值的TSQL函數...使用DBCommand調用tsql函數的SSIS OLE

我有一個SSIS數據流,其中有一個日期時間列DepartureDateGMT和一個名爲DepartureTimeZoneKey的整數列。

我有一個名爲dbo.udf_ConvertFromGMT一個TSQL功能()返回datetime

我想創建一個OLE DB命令,填補了一個名爲DepartureDate列保存調用的值:

dbo.udf_ConvertFromGMT(DepartureDateGMT,DepartureTimezoneKey)

對於SSIS數據流中的每一行。

我沒有更新/插入現有的表,我只是想將結果保存到

我已經嘗試了很多事情的數據流的數據集的每一行的DepartureDate列,像

Exec? dbo.udf_ConvertFromGMT(?,?)

SELECT dbo.udf_ConvertFromGMT(DepartureDateGMT,DepartureTimezoneKey)

dbo.udf_ConvertFromGMT(?,?)

DECLARE @Result DATETIME SET @Result = dbo.udf_ConvertFromGMT( ?)

但我發現了:語法錯誤,違反許可或其他非特異性的錯誤

我找錯了樹?我嘗試過使用DerivedColumn,但它不允許調用TSQL函數。

謝謝!

回答

1

數據流任務中的OLE DB命令旨在爲數據流中的每一行運行一次SQL語句。無論它是否適用於您,如果有很多行要處理,您可能對性能不滿意。您是否查看了SSIS表達式語言以查看您是否可以將功能而不是函數調用移動到派生列組件中?

如果您必須使用OLE DB命令,則可以嘗試將SQL函數更改爲SQL存儲過程。在OLE DB命令,你可以這樣調用

EXEC dbo.usp_ConvertFromGMT ?, ?, ? OUTPUT 

一個過程,我認爲,你可以映射的結果作爲輸出參數(第3?在命令)的數據流列。

+0

謝謝鮑勃 - 一旦我將它從一個功能改變爲一個功能,它就像一個魅力! – 2010-08-20 00:02:47