T-SQL 문의 결과 집합을 데이터 흐름에 추가하는 방법은 무엇입니까?

존 손더스

간단한 SSIS 패키지가 있는데 좀 복잡하게 만들고 싶습니다.

지금은 OLE DB 원본에서 저장 프로 시저를 실행하고 저장 프로 시저에서 반환 된 행을 데이터 흐름에 추가합니다. 그런 다음 반환 된 각 행에 대해 OLE DB 명령 변환을 실행하여 두 번째 저장 프로 시저 (두 번째 데이터베이스에서)를 실행하고 소스의 열을 매개 변수로 전달합니다.

여기에 이미지 설명 입력

두 번째 저장 프로시 저는 동기화 기능을 수행하며 추가, 삭제 및 업데이트의 총 합계를 기록하고 싶습니다. "sync"저장 프로시 저는 MERGE 문의 OUTPUT 절을 사용하여이 데이터를 가져와 결과 집합으로 반환합니다.

OLE DB 명령 변환에서이 결과 집합을 가져 오는 방법이 없습니다. 출력 열을 추가 할 수 없습니다.

스크립트 변환을 추가하는 것 외에 추가, 삭제 및 업데이트 열의 총 합계를 기록 할 수있는 방법이 있습니까?

Billinkc

이것은 당연한 것만 큼 간단하지 않습니다. 또는 SSIS 수업으로 돌아 가야합니다.

OLE DB 명령 구성 요소는 동기 구성 요소이므로 데이터 흐름에 새 행을 추가 할 수 없습니다.

또한 데이터 흐름에 새 열을 추가 할 수 없습니다. 그것이 직관적이지 않은 첫 번째 것입니다. 소스에서 볼 수 있습니다. nvarchar (10) / 문자열 길이 10 인 ActionName 열을 추가했습니다. 원하는 경우 OLE DB 명령 구성 요소 이전에 파생 열 변환에 열을 추가 할 수 있습니다.

데이터 흐름에 행을 추가 할 수 없으므로 생성 할 수있는 레코드 집합을 사용하는 대신 내 proc에 대해 OUTPUT 매개 변수 만 사용할 수 있습니다. 아마도 저장 프로시 저는 한 번에 하나의 행만 변경할 수 있으며 이것은 괜찮지 만 일반적인 코드 냄새가납니다.

테이블 정의 및 설정

CREATE TABLE dbo.so_27932430
(
    SourceId int NOT NULL
,   SourceValue varchar(20) NOT NULL
);
GO
INSERT INTO
    dbo.so_27932430
(SourceId, SourceValue)
VALUES
    (1, 'No change')
,   (3,'Changed');

저장된 Proc

CREATE PROCEDURE
    dbo.merge_27932430
(
    @SourceId int
,   @SourceValue varchar(20)
,   @ActionName nvarchar(10) OUTPUT
)
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE
        @BloodyHack table
    (
        ActionName nvarchar(10) NOT NULL
    ,   SourceId int NOT NULL
    );

    MERGE
        dbo.so_27932430 AS T
    USING
    (
        SELECT
            D.SourceId
        ,   D.SourceValue
        FROM
        (
            SELECT @SourceId, @SourceValue
        ) D(SourceId, SourceValue)
    ) AS S
    ON
    (
        T.SourceId = S.SourceId
    )
    WHEN
        MATCHED 
            AND T.SourceValue <> S.SourceValue
        THEN
        UPDATE
        SET
            T.SourceValue = S.SourceValue
    WHEN
        NOT MATCHED THEN
        INSERT
        (
            SourceId
        ,   SourceValue
        )
        VALUES
        (
            SourceId
        ,   SourceValue
        )
    OUTPUT 
        $action, S.SourceId
    INTO
        @BloodyHack;

    /* Pick one, any one*/
    SELECT
        @ActionName = BH.ActionName
    FROM
        @BloodyHack AS BH

END

소스 쿼리

SELECT
    D.SourceId
,   D.SourceValue
,   CAST(NULL AS nvarchar(10)) AS ActionName
FROM
(
    VALUES
        (1, 'No change')
    ,   (2, 'I am new')
    ,   (3,'I Changed')
) D(SourceId, SourceValue);

OLE DB 명령 설정

EXECUTE dbo.merge_27932430 @SourceId = ?, @SourceValue = ?, @ActionName = ? OUTPUT;

결과

여기에 이미지 설명 입력

참고 문헌

Biml

무료 BidsHelper 가 있다고 가정하면 다음 Biml이이 패키지를 생성하는 데 사용되었습니다.

<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <OleDbConnection Name="CM_OLE" ConnectionString="Data Source=localhost\dev2014;Initial Catalog=tempdb;Provider=SQLNCLI10.1;Integrated Security=SSPI;Auto Translate=False;" />
    </Connections>
    <Packages>
        <Package ConstraintMode="Linear" Name="so_27932430">
            <Variables>
                <Variable DataType="String" Name="QuerySource">
                    <![CDATA[SELECT
    D.SourceId
,   D.SourceValue
,   CAST(NULL AS nvarchar(10)) AS ActionName
FROM
(
    VALUES
        (1, 'No change')
    ,   (2, 'I am new')
    ,   (3,'I Changed')
) D(SourceId, SourceValue);
]]></Variable>
                <Variable DataType="String" Name="QueryCommand">EXECUTE dbo.merge_27932430 @SourceId = ?, @SourceValue = ?, @ActionName = ? OUTPUT;</Variable>
            </Variables>
            <Tasks>
                <Dataflow Name="DFT OLEDB Test">
                    <Transformations>
                        <OleDbSource ConnectionName="CM_OLE" Name="OLESRC GenData">
                            <VariableInput VariableName="User.QuerySource" />
                        </OleDbSource>
                        <OleDbCommand ConnectionName="CM_OLE" Name="OLECMD Test">
                            <DirectInput>EXECUTE dbo.merge_27932430 @SourceId = ?, @SourceValue = ?, @ActionName = ? OUTPUT;</DirectInput>
                            <Parameters>
                                <Parameter SourceColumn="SourceId" DataType="Int32" TargetColumn="@SourceId"></Parameter>
                                <Parameter SourceColumn="SourceValue" DataType="AnsiString" Length="20" TargetColumn="@SourceValue"></Parameter>
                                <Parameter SourceColumn="ActionName" DataType="String" Length="10" TargetColumn="@ActionName"></Parameter>
                            </Parameters>
                        </OleDbCommand>
                        <DerivedColumns Name="DER PlaceHolder" />
                    </Transformations>
                </Dataflow>
            </Tasks>
        </Package>
    </Packages>
</Biml>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

두 테이블에서 SQL 결과 집합을 무작위 화하는 방법은 무엇입니까?

분류에서Dev

T-SQL : 문자열에 저장된 열에 데이터를 추가하는 방법은 무엇입니까?

분류에서Dev

Power BI에서 데이터 세트의 데이터 흐름을 수정하는 방법은 무엇입니까?

분류에서Dev

SQL 쿼리에서 이전의 새 데이터 열을 추가하는 방법은 무엇입니까?

분류에서Dev

이 예제에서 SQL의 결과 xquery에 구분 기호를 추가하는 방법은 무엇입니까?

분류에서Dev

PHP의 데이터베이스에서 여러 열을 하나의 결과로 합산하는 방법은 무엇입니까? 그게 가능합니까?

분류에서Dev

t-sql의 주어진 데이터에 단어 집합이 나타나는 횟수를 계산하는 방법은 무엇입니까?

분류에서Dev

테이블을 데이터 결과의 다른 확률에 매핑하는 방법은 무엇입니까?

분류에서Dev

SAS : proc sql WHERE 문 내에서 데이터 집합 요소를 반복하는 방법은 무엇입니까?

분류에서Dev

Android에서 더 큰 집합의 데이터 하위 집합을 유지하는 방법은 무엇입니까?

분류에서Dev

데이터 프레임의 행 이름을 특수 문자와 연결하는 방법은 무엇입니까?

분류에서Dev

두 개의 텍스트 상자 값 (데이터)을 데이터베이스 (My SQL)의 단일 열에 추가하는 방법은 무엇입니까?

분류에서Dev

t- 검정 결과에서 올바른 데이터 이름을 사용하는 방법은 무엇입니까?

분류에서Dev

PL / SQL 테이블 함수-빈 결과 집합을 반환하는 방법은 무엇입니까?

분류에서Dev

SQL 결과에서 파라 메트릭 하위 집합을 얻는 방법은 무엇입니까?

분류에서Dev

추가 열에서 하나의 SQL 쿼리에서 2 그룹 쿼리의 결과를 결합하는 방법은 무엇입니까?

분류에서Dev

SQL을 사용하여 결과 집합에서 처음 20 개 레코드 만 주문하는 방법은 무엇입니까?

분류에서Dev

열 이름에 포함 된 문자열을 기반으로 데이터 프레임의 열을 결합하는 방법은 무엇입니까?

분류에서Dev

용어집과 문법을 결합하는 방법은 무엇입니까?

분류에서Dev

값을 공유하는 행의 결과 집합 차이를 계산하는 방법은 무엇입니까?

분류에서Dev

C # SQL) Azure SQL 데이터베이스에 대한 web.config의 연결 문자열을 암호화하는 방법은 무엇입니까? (그리고 암호 해독을 위해 키를 Azure SQL 데이터베이스로 가져 오나요?)

분류에서Dev

SQl Server에서 누락 된 행으로 인해 결과 집합을 채우는 방법은 무엇입니까?

분류에서Dev

루프의 경우 HTTPS 지오 코딩 API 호출을 수행하고 결과 입력시 SQL 데이터베이스에 좌표를 입력합니다. 노드의 HTTPS 모듈을 작동시키는 방법은 무엇입니까?

분류에서Dev

SQL Server 데이터베이스 테이블에서 자유 흐름 검색을 작성하는 방법은 무엇입니까?

분류에서Dev

webMethods 흐름 서비스에서 두 문서 목록을 연결하는 방법은 무엇입니까?

분류에서Dev

Plotly : 시계열 데이터에 추세선과 평행선을 추가하는 방법은 무엇입니까?

분류에서Dev

자바에서 MySQL 결과 집합 while 루프에서 값을 추가하는 방법은 무엇입니까?

분류에서Dev

두 SQL 쿼리의 결과를 결합하는 방법은 무엇입니까?

분류에서Dev

Pandas 데이터 프레임에서 행의 하위 집합을 조작하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    두 테이블에서 SQL 결과 집합을 무작위 화하는 방법은 무엇입니까?

  2. 2

    T-SQL : 문자열에 저장된 열에 데이터를 추가하는 방법은 무엇입니까?

  3. 3

    Power BI에서 데이터 세트의 데이터 흐름을 수정하는 방법은 무엇입니까?

  4. 4

    SQL 쿼리에서 이전의 새 데이터 열을 추가하는 방법은 무엇입니까?

  5. 5

    이 예제에서 SQL의 결과 xquery에 구분 기호를 추가하는 방법은 무엇입니까?

  6. 6

    PHP의 데이터베이스에서 여러 열을 하나의 결과로 합산하는 방법은 무엇입니까? 그게 가능합니까?

  7. 7

    t-sql의 주어진 데이터에 단어 집합이 나타나는 횟수를 계산하는 방법은 무엇입니까?

  8. 8

    테이블을 데이터 결과의 다른 확률에 매핑하는 방법은 무엇입니까?

  9. 9

    SAS : proc sql WHERE 문 내에서 데이터 집합 요소를 반복하는 방법은 무엇입니까?

  10. 10

    Android에서 더 큰 집합의 데이터 하위 집합을 유지하는 방법은 무엇입니까?

  11. 11

    데이터 프레임의 행 이름을 특수 문자와 연결하는 방법은 무엇입니까?

  12. 12

    두 개의 텍스트 상자 값 (데이터)을 데이터베이스 (My SQL)의 단일 열에 추가하는 방법은 무엇입니까?

  13. 13

    t- 검정 결과에서 올바른 데이터 이름을 사용하는 방법은 무엇입니까?

  14. 14

    PL / SQL 테이블 함수-빈 결과 집합을 반환하는 방법은 무엇입니까?

  15. 15

    SQL 결과에서 파라 메트릭 하위 집합을 얻는 방법은 무엇입니까?

  16. 16

    추가 열에서 하나의 SQL 쿼리에서 2 그룹 쿼리의 결과를 결합하는 방법은 무엇입니까?

  17. 17

    SQL을 사용하여 결과 집합에서 처음 20 개 레코드 만 주문하는 방법은 무엇입니까?

  18. 18

    열 이름에 포함 된 문자열을 기반으로 데이터 프레임의 열을 결합하는 방법은 무엇입니까?

  19. 19

    용어집과 문법을 결합하는 방법은 무엇입니까?

  20. 20

    값을 공유하는 행의 결과 집합 차이를 계산하는 방법은 무엇입니까?

  21. 21

    C # SQL) Azure SQL 데이터베이스에 대한 web.config의 연결 문자열을 암호화하는 방법은 무엇입니까? (그리고 암호 해독을 위해 키를 Azure SQL 데이터베이스로 가져 오나요?)

  22. 22

    SQl Server에서 누락 된 행으로 인해 결과 집합을 채우는 방법은 무엇입니까?

  23. 23

    루프의 경우 HTTPS 지오 코딩 API 호출을 수행하고 결과 입력시 SQL 데이터베이스에 좌표를 입력합니다. 노드의 HTTPS 모듈을 작동시키는 방법은 무엇입니까?

  24. 24

    SQL Server 데이터베이스 테이블에서 자유 흐름 검색을 작성하는 방법은 무엇입니까?

  25. 25

    webMethods 흐름 서비스에서 두 문서 목록을 연결하는 방법은 무엇입니까?

  26. 26

    Plotly : 시계열 데이터에 추세선과 평행선을 추가하는 방법은 무엇입니까?

  27. 27

    자바에서 MySQL 결과 집합 while 루프에서 값을 추가하는 방법은 무엇입니까?

  28. 28

    두 SQL 쿼리의 결과를 결합하는 방법은 무엇입니까?

  29. 29

    Pandas 데이터 프레임에서 행의 하위 집합을 조작하는 방법은 무엇입니까?

뜨겁다태그

보관