3

2 つのテーブルを同期する必要があります。

表A

Id    Name  

表B

Id  Name RefID --It's a Foreign key, defined as primary key in Table "TableReference"

テーブル参照

RefID -- Identity Column, auto increment

に挿入するたびにTableAに値を挿入し、その挿入された値をの列にコピーする必要があります。TableBTableBTableReferenceRefIdTableB

私は何をしていますか?

私は SSIS を使用しているため、SSIS ベースのソリューションまたは SQL ベースのソリューションが必要です。Merge SQL コマンドを使用してテーブルをマージする方法は知っていますが、値を に挿入しTableRefてコピーして戻すことができませんTableB。どうすればこれを達成できるかわかりませんでした。SQL のユーザー定義関数では許可されていないためINSERT、使用できません。

Merge TabaleB T
Using Table A S
On S.Id=T.Id
WHEN MATCHED THEN
UPDATE
T.ID=S.ID,
T.NAME=S.NAME

WHEN NOT MATCHED BY TARGET THEN

INSERT(S.ID,S.NAME, {Somehow here i need a function call that inserts in TableRef and   Returns SCOPE_IDENTITY})

問題は、T-SQL 関数が許可されておらず、 after以外の TSQL が許可INSERTされていないため、ストアド プロシージャをここで呼び出すことができないことです。MergeINSERTWHEN NOT MATCHED BY TARGET THEN

4

1 に答える 1

0

TRIGGERTableBに追加できますか。その場合、1 つのオプションは、INSERTED行を使用してそこから移動することです。

たぶん、次のようなものです(テストされていません):

CREATE TRIGGER dbo.tr_TableB
ON dbo.TableB
FOR INSERT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT TableReference  DEFAULT VALUES;  

    DECLARE @RefId INT;
    SELECT @RefId  = SCOPE_IDENTITY();

    UPDATE t1
        SET t1.RefId = @RefId 
    FROM dbo.TableB AS t1 
        INNER JOIN INSERTED AS i
            ON i.Id= t1.Id

END
GO

幸運を。

于 2013-01-15T19:55:05.747 に答える