0
나는 다음 sql 작업을 자동화 된 ssis 패키지로 변환하려고 애를 썼다. 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 루프에 대한 식을 늘릴 수 없다면 ssis의 for_loop에 대해 @@ FETCH_STATUS = 0을 대체 할 수있는 아이디어를 알려 주시기 바랍니다. – Tilak
왜 커서를 교체해야합니까? 정확하고 신속하게 작동한다면 변경없이 SQL 실행 작업에 넣을 수 있습니다. SSIS의 루프 컨테이너는 일반적으로 가져 오기 또는 유사한 목적으로 여러 파일을 반복하는 데 사용됩니다. – Pondlife