2015-02-02 1 views
0

SQL 실행 작업으로 MERGE 문을 실행해야하는 SSIS 패키지가 있습니다. Oracle DB와 SQL Server 2012 DB 모두에서이 작업을 수행해야합니다. 내 질문은 어떻게 SSIS 패키지의 변수에 저장할 수 있도록 결과 집합의 영향을받는 행 수를 얻을 수 있습니까? 업데이트되거나 삽입되었는지는 알 필요가 없으며, MERGE가 동적이며 변수의 표현식을 통해 패키지에서 계산되기 때문에 오라클에서 프로 시저를 생성하고 싶지 않습니다. 난 단지 영향을받은 행의 가치를 얻고 싶습니다.SSIS SQL 작업 실행, MERGE 문에서 영향을받은 행 (Oracle 및 SQL Server)

P .: SQL 실행 태스크를 사용할 수 없으면 스크립트를 사용하여 병합을 실행할 수 있습니까? 문제는 내가 읽은 것부터 오라클의 ExecuteNonQuery()가 MERGE로 영향을받는 행을 반환하지 않는다는 것입니다. SQL Server에 대한 정보를 찾을 수 없었습니다. 누구든지 도와 줄 수 있습니까?

미리 감사드립니다.

업데이트 : 방금 SQL Server의 ExecuteNonQuery()를 사용하여 스크립트를 검사하고 영향을받은 번호 또는 행을 반환했습니다. 그러나 스크립트를 사용하지 않고 Execute SQL Task를 사용할 수 있다면 더 좋을 것입니다. 그러나 ResultSet으로 영향을받는 행을 얻으려면 어떻게해야합니까?

+0

당신은이 스크립트 작업과는 확실히 할 수 있습니다. 오라클에 대해서는 모르지만 ExecuteScalar()를 사용하십시오. –

+0

ExecuteScalar()는 테이블이 반환되고 첫 번째 열의 첫 번째 행을 검색하는 경우에만 작동합니까? 영향을받는 행 수는 테이블에 반환되지 않습니다. – stackoverflowthebest

답변

0

SQL Server에서는 병합 문과 함께 OUTPUT 절을 사용할 수 있습니다. 여기 당신이 읽을만한 것이 있습니다. 그리고 오라클의 경우,이 읽기 : PLSQL: Get number of records updated vs inserted when a merge statement is used

https://www.simple-talk.com/sql/learn-sql-server/implementing-the-output-clause-in-sql-server-2008/

+0

문제는 SQL % ROWCOUNT를 ResultSet으로 가져 오는 방법을 알지 못하기 때문에 테이블이어야하고 SELECT FROM DUAL이 작동하지 않으므로 그 값을 검색하는 방법을 모르겠습니다. – stackoverflowthebest

+0

MERGE 뒤에 행 개수의 SELECT를 수행하는 저장된 proc에 병합 문을 넣습니다. execute SQL 태스크에서 저장된 proc을 호출하십시오. –