将SQL INSERT与参考表合并

时间:2013-01-15 19:51:11

标签: sql sql-server-2008 tsql ssis

我需要同步两个表。

表A

Id    Name  

表B

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

TableReference

RefID -- Identity Column, auto increment

我需要合并TableATableB,以便TableB中的每个插页都应将值插入TableReference,并且插入的值应为已复制到RefId的{​​{1}}列。

我在做什么?

我正在使用SSIS,因此我需要一个基于SSIS的解决方案或基于SQL的解决方案。我知道如何使用Merge SQL命令合并表,但我无法在TableB中插入值并将其复制回TableRef。无法弄清楚我是如何做到这一点的。 SQL用户定义的函数不允许TableB,因此我无法使用它。

INSERT

问题是T-SQL函数不允许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}) 并且这里不能调用存储过程,因为INSERT不允许Merge以外的任何TSQL事件INSERT

1 个答案:

答案 0 :(得分:0)

您是否可以在TableB上添加TRIGGER。如果是这样,一个选项是使用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
祝你好运。