0
私は、次のt SQLのタスクを自動化されたssisパッケージに変換するためにstruglingしています。 私はforループのconntainerを使用して実装しようとしましたが、ループロジックを作成している間、私は立ち往生しています。私はロジックここカーソルのロジック
で私を助けることができるいくつかのいずれかで、本当に感謝T- SQLコードが
-- SCRIPT TO BULK IMPORT MATERNAL HLA & INSERT CORD NIMA
IF OBJECT_ID('tempdb..#maternal_hla_from_solar') IS NOT NULL
BEGIN
drop table #maternal_hla_from_solar
END
CREATE TABLE #maternal_hla_from_solar(
[donor_id] [int] NOT NULL,
[antigen_id] [int] NOT NULL
)
-- bulk upload maternal HLA from file
BULK
INSERT #maternal_hla_from_solar
FROM 'C:\Users\zabeenp\Documents\SQL\populate_db\data\20111212_maternal_hla.txt'
WITH
(
FIRSTROW = 2,
MAXERRORS = 0,
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
-- declare variables
DECLARE @donor_id int
DECLARE @maternal_hla varchar(5000)
DECLARE @definitive_type_date date = GETDATE()
DECLARE @modified_on datetime2(7) = GETDATE()
-- Cursor to process each row from #maternal_hla_from_solar
DECLARE c_insertCordNima CURSOR FAST_FORWARD
FOR select DISTINCT donor_id from #maternal_hla_from_solar -- important to use DISTINCT here
OPEN c_insertCordNima
FETCH NEXT FROM c_insertCordNima INTO @donor_id
WHILE @@FETCH_STATUS = 0
BEGIN
SET @maternal_hla = '' -- important to wipe string each time
-- concatenare maternal antigen_ids into one string
SELECT @maternal_hla = COALESCE(@maternal_hla + ',', '') + CONVERT(VARCHAR(10),antigen_id)
FROM #maternal_hla_from_solar
where donor_id = @donor_id
-- remove first comma
SET @maternal_hla = (select right(@maternal_hla,len(@maternal_hla)-1))
-- exec insertCordNIMA SP
EXECUTE insertCordNIMA
@donor_id
,@maternal_hla
,@definitive_type_date
,@modified_on
FETCH NEXT FROM c_insertCordNima INTO @donor_id
END
CLOSE c_insertCordNima
DEALLOCATE c_insertCordNima
あなたはコードそれの何*目的*を説明するのであればあなたの質問は改善されるだろう。タブで区切られたファイルを一時テーブルに読み込んで、各ドナーIDごとにカンマ区切り文字列を作成してから、格納されたprocを実行しているようです。 – billinkc
コードの目的は、最後のdonor_idまでaginとagin上の上記のパラメータでストアドプロシージャを実行することです。ここでは基本的に私は同じdonor_idで多くのantigen_idsを持っているので、上記のロジックで各ステップでspに与える前に。私のssisパッケージでは、最初の式を取得できず、forループの式とインクリメント式を確認できません。 – Tilak
なぜカーソルを置き換える必要がありますか?それが十分に迅速かつ適切に機能する場合、それを変更せずにExecute SQLタスクに入れるだけです。 SSISのループコンテナは、通常、複数のファイルをループしてインポートまたは同様の目的で使用します。 – Pondlife