如何从另一个表复制列ID?

时间:2018-07-23 01:22:49

标签: sql sql-server tsql stored-procedures

自上周以来,我一直坚持这一点。我有两个表,其中id的{​​{1}}列与CustomerTbl的{​​{1}}列相关:

enter image description here

我想要实现的是我想从自身复制表的数据,但是将新生成的CustomerID的ID复制到PurchaseTbl CustomerTbl

enter image description here

就像上面的屏幕截图一样。很高兴提供任何帮助:)

2 个答案:

答案 0 :(得分:0)

不确定最终游戏是什么,但是解决此问题的一种方法是:

INSERT INTO purchaseTbl ( customerid ,
                      item ,
                      price )
        SELECT customerid + 3 ,
               item ,
               price
        FROM   purchaseTbl;

答案 1 :(得分:0)

您可以使用OUTPUT子句访问新ID。但是要同时访问OLD ID和NEW ID,您将需要使用MERGE语句。 INSERT语句不允许您访问源旧ID。

首先,您需要在某个地方存储新旧ID(映射表)。您可以使用表变量或临时表

declare @out table
(
    old_id  int,
    new_id  int
)

然后使用带有输出子句的merge语句

merge 
        #CustomerTbl as t
using
(
        select  id, name
        from    CustomerTbl
) as s
on      1 = 2                       -- force it to `false`, not matched
when    not matched then
        insert (name)
        values (name)
output                              -- the output clause
        s.id,                       -- old_id
        inserted.id                 -- new_id
into    @out (old_id, new_id);

此后,您只需使用@out并使用old_id加入即可获取PurchaseTbl的new_id

insert into PurchaseTbl (CustomerID, Item, Price)
select  o.new_id, p.Item, p.Price
from    @out o
        inner join PurchaseTbl p    on  o.old_id    = p.CustomerID