문제

이미 존재하는 저장 프로시저를 사용하여 삽입해야 하는 데이터를 마이그레이션하고 있습니다.저장 프로시저에는 삽입된 행에 대한 ID의 매개변수와 반환 값(select 문에서)이 있습니다.SSIS의 OLE DB 명령 내에서 열 값을 매개 변수로 전달하는 저장 프로시저를 호출할 수 있으며 일반적으로 저장 프로시저의 출력 매개 변수를 사용하여 "id" 출력을 처리합니다.그러나 프로시저가 id 값을 반환하기 위해 select를 사용할 때 이것이 반환 값으로 어떻게 처리될 수 있는지 잘 모르겠습니다.다음은 이전에 사용했던 작업의 예입니다. 하지만 선택 항목에서 반환된 값을 가져와야 합니다.

exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
도움이 되었습니까?

해결책

내가 찾은 방법은 실제로 매우 간단했습니다.

exec ? = dbo.StoredProc @param = ?, @param2 = ?

사용 가능한 대상 열에 @RETURN_VALUE가 나타납니다.

다른 팁

SqlCommand 속성에 변수 이름을 사용하지 말고 출력 매개 변수에 물음표와 "OUT" 또는 "OUTPUT" 레이블만 사용하세요.

출력 매개 변수 값을 가져오는 방법은 OLE DB 명령 앞에 파생 열 변환을 파이프라인에 배치하여 열(SSIS 변수에 매핑됨)을 도입하여 프로시저 결과를 캡처하는 것입니다.

보다 OLEDB 명령 변환 및 식별 열 이를 수행하는 방법에 대한 화면 캡과 함께 좋은 개요를 확인하세요.또한 참조하십시오 휴지통 대상 어댑터 첫 번째 링크에 사용된 휴지통 대상.이와 같은 디버깅을 위해 사용할 수 있는 편리한 도구입니다.

저장 프로시저가 결과 집합을 반환하는 경우 이를 캡처해야 합니다.

DECLARE @results TABLE (
    [ID] INT NOT NULL
)

INSERT @results ([ID])
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output

SELECT * FROM @results 

메모:TABLE 변수를 사용했습니다.SQL Server 버전에 따라 임시 테이블을 사용해야 할 수도 있습니다.

나는 항상 SQL 실행 작업 내에서 매개변수 매핑을 사용해 많은 성공을 거두었습니다.SQL 문은 "EXEC nameofstoredproc ?, ?OUTPUT", 물음표는 매개변수의 위치를 ​​지정하고 매개변수가 출력인 경우 OUTPUT을 지정합니다.

적절한 변수 이름, 방향(입력, 출력, ReturnValue) 및 데이터 유형을 사용하여 매핑의 매개변수를 지정합니다.저장 프로시저가 결과 세트를 통해 원하는 데이터를 반환하므로 ID와 버전을 ReturnValue로 수집하는 변수의 방향을 지정하세요.그것은 당신에게 잘 작동할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top