불행히도 문제는 재현 할 수 없지만 누군가에게 익숙한 경우를 대비하여 설명하려고합니다. SSIS 2005, SP2를 사용하고 있습니다.SSIS - 파생 된 열 변환에 사용되는 사용자 변수를 사용할 수 없음 - 경우에 따라
내 패키지는 패키지 범위 사용자 변수가 있습니다 -의는 제어 흐름에서
- 첫 번째 단계는 저장 프로 시저를 실행하는 SQL 실행 작업입니다 user_var를 호출 할 수 있습니다. SP가 수행하는 작업은 SQL 테이블 (ID 열 포함)에 레코드를 삽입 한 다음 돌아가서 최대 ID 값을 얻는 것입니다. SQL 실행 작업이 user_var
- 에이 출력을 저장하는 제어 흐름 다음 데이터 흐름 작업을 가지고 - 그것은가는 어떤 소스 데이터를 가져, 라는 열을 설정하는 파생 열이 run_id user_var에 - 그리고 데이터를 SQL 대상에 저장
대부분의 경우 (이 템플릿은 매일 많은 패키지에 사용됨)이 모든 것이 효과적입니다. 생성 된 모든 대상 레코드는 올바른 run_id으로 설정됩니다.
그러나, 어떤 경우에는, run_id 동일 user_var을하지 않는 대상 데이터 세트가, 대신에 0의 값을 (0 user_var의 기본값입니다) 가져옵니다.
나는이 일이 일어난 2 가지 경우가 있지만, 나는 할 수 없다. 일이 일어난다. 두 경우 모두 run_id = 0 인 레코드가 10,000 개에 불과했습니다. SSIS가 10,000 개의 레코드 블록에 데이터를 기록하기 때문에 처음에 기록 된 데이터의 경우 user_var이 아직 설정되지 않았습니다. . 그런 다음 첫 번째 블록 이후 나머지 데이터에 대해 run_id이 올바른 값으로 설정됩니다.
그러나 컨트롤이 SQL 실행 작업에서 내 데이터 흐름으로 전달되었습니다. SP가 완료되고 user_var이 설정 될 때까지 계속 진행되지 않을 것이라고 생각됩니다. 어쩌면 SP를 실행하지만 완료 될 때까지 기다리지 않을 수 있습니까?
두 경우 모두 거의 같은 시간에 새로운 user_var을 얻기 위해 테이블을 때리는 패키지가 몇 개있는 것으로 보입니다. 그리고 두 경우 모두 많은 데이터 (4 천만 행, 6 천만 행)가 기록되었습니다. 제 생각에 그것은 글이 잠시 동안 일어 났음을 의미합니다.
장황하고 모호한 일입니다. 성공적인 조합! 누구에게도 익숙한 소리입니까? 감사.
이CREATE PROCEDURE [dbo].[sp_GetRunIDForPackage] (@pkg varchar(50)) AS
-- add a new entry for this run of this package - the RUN_ID is an IDENTITY column and so
-- will get created for us
INSERT INTO shared.STAGE_LOAD_JOB(EFFECTIVE_TS, EXECUTED_BY)
VALUES(getdate(), @pkg)
-- now go back into the table and get the new RUN_ID for this package
SELECT MAX(RUN_ID)
FROM shared.STAGE_LOAD_JOB
WHERE EXECUTED_BY = @pkg
문제가되는 DFT가 나오기 전에 실제로는 ** user_var **를 사용하는 또 다른 (감사하는) DFT가 있습니다. ** user_var **에서 항상 0이 아닌 값을 쓰는 데 성공합니다. 이것은 ** user_var **에 0이 아닌 값이 있다고 믿게합니다. 차이점은 주 (문제가있는) DFT가 많은 양의 데이터를 작성하고 감사 DFT가 빠르기 때문일 수 있습니다. 그러나 감사 DFT가 먼저옵니다! 그래서 이상한. – soo