1

Oracle データを SQL Server にインポートしています。クエリを実行して処理するデータを取得する OLE DB ソースの後で、何らかの方法でフィールド値に対して TSQL 関数を呼び出そうとしています...

DepartureDateGMT という日時列と DepartureTimeZoneKey という整数列を持つ SSIS データ フローがあります。

日時を返す dbo.udf_ConvertFromGMT(,) という TSQL 関数があります。

呼び出しの値を保持する DepartureDate という列を埋める OLE DB コマンドを作成しようとしています。

dbo.udf_ConvertFromGMT(DepartureDateGMT,DepartureTimezoneKey)

SSIS データフローの各行。

既存のテーブルを更新/挿入するのではなく、データ フローのデータセットの各行の DepartureDate 列に結果を格納しようとしているだけです。

私は多くのことを試しました

エグゼクティブ?dbo.udf_ConvertFromGMT(?,?)

SELECT dbo.udf_ConvertFromGMT(DepartureDateGMT,DepartureTimezoneKey)

dbo.udf_ConvertFromGMT(?,?)

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

しかし、構文エラー、権限違反、またはその他の非特定エラーが発生します

私は間違った木を吠えていますか?DerivedColumn を使用してみましたが、TSQL 関数を呼び出すことはできません。

ありがとう!

4

1 に答える 1

1

データフロータスクのOLEDBコマンドは、データフローの各行に対してSQLステートメントを1回実行するように設計されています。うまくいくかどうかに関係なく、処理する行が多いとパフォーマンスに満足できない場合があります。SSIS式言語を調べて、関数呼び出しの代わりに機能を派生列コンポーネントに移動できるかどうかを確認しましたか?

OLE DBコマンドを使用する必要がある場合は、SQL関数をSQLストアドプロシージャに変更してみてください。OLE DBコマンドでは、次のようなプロシージャを呼び出すことができます

EXEC dbo.usp_ConvertFromGMT ?, ?, ? OUTPUT

次に、結果を出力パラメーター(コマンドの3番目の?)としてデータフロー列にマップできると思います。

于 2010-08-19T23:10:07.183 に答える