1

SSIS 2012 を使用して、Excel ファイルをデータベースにインポートしています。インポート時にデータベースに入力する必要があるフィールドの 1 つを Excel ファイルに保存できません。フィールドに入力される値は、データベースでレコードが作成されているときにのみ知ることができます。私が使用している特定のソフトウェアは、このフィールドに最後に使用された値を別のデータベースに保存します。インポート時にレコードを作成するとき、このフィールドをインクリメントし、新しい値を新しいレコードに挿入する必要があります。この値を生成する T-SQL スクリプトがありますが、インポート中に各行の値を取得する方法を知るには SSIS について十分に知りません。

必要な値を生成するために使用しているスクリプトは次のとおりです。

--Declare some variables
DECLARE @I_sCompanyID smallint,
@O_mNoteIndex numeric(19,5),
@O_iErrorState int

--Get the CompanyID
select @I_sCompanyID = CMPANYID
from DYNAMICS..SY01500
where INTERID = DB_Name()

--Get and increment the next note index
exec DYNAMICS.[dbo].[smGetNextNoteIndex] @I_sCompanyID, 1, @O_mNoteIndex output, @O_iErrorState output

--Print the Next Note Index
SELECT @O_mNoteIndex
4

2 に答える 2

2

頭に浮かぶオプションは、を使用しScript Componentて O_mNoteIndex という名前の列をデータ フローに追加することです。基本的に、上記の TSQL コードを使用し、OleDBSqlClientまたはOdbcを使用して Dynamics サーバーにクエリを実行し、ID を生成する必要があります。

列を出力バッファーに追加し、それに tsql 値を割り当てる必要があります。これを行う方法を探る以前の回答は見つかりませんが、msdnサイトで開始する必要があります

于 2013-09-10T22:43:01.080 に答える
0

上記のスクリプトを実行し、結果を SSIS 変数に返すことをお勧めします。次に、その変数を計算列変換に追加します。これは、データセットをロードする前にそのスクリプトを 1 回だけ実行する必要があることを前提としています。レコードごとに実行する必要がある場合は、@billinkc の方法を使用する必要があります。

または、スクリプトを回避したい場合は、ソース データを OLEDB レコードセットにロードし、それを For Each ループで使用して、ループの反復ごとにそのスクリプトを呼び出すことができます。

于 2013-09-11T04:33:46.173 に答える