复制插入记录的每个标识

时间:2011-04-29 09:15:11

标签: sql-server sql-server-2005

我有两张桌子 第一:

Table:     TBL#Sell

   SellId    ClientId    ProductId
                1           3
                3           5
                4            6

第二:

 Table: TBL#Sell2

    SellId      ClientId       ProductId

现在我想将第一个表的每个记录复制到第二个表。 第二个表(Sell2.SellId)中的“SellId”列是自动增量(标识)。

对于任何插入TBL#Sell2.SellId将设置新标识,我必须将标识存储在TBL#Sell1.SellId
是否清楚? 解决办法是什么? ,PLZ。 的感谢

我想在TBL中存储TBL#Sell2.SellId#Sell.SellId

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

查看联机丛书中的OUTPUT子句。

答案 2 :(得分:0)

我认为您有更多方法可以执行此任务。

您可以编写一个存储过程,对于table1中的每个记录写入table2,然后更新table1,从SCOPE_IDENTITY()获取标识值

或者另一种方式可能是,如果这对夫妇ClientId / ProductId是一个关键词,可以进行插入,然后进行类似的更新:

insert into TBL#Sell2
select SellId, ClientId, ProductId from TBL#Sell

upadte TBL#Sell
set TBL#Sell.SellId = TBL#Sell2.SellId
from TBL#Sell T1 join TBL#Sell2 T2
on T1.ClientId = T2.ClientId and T1.ProductId  = T2.ProductId 

编辑用SCOPE_IDENTITY取代@@ Identity

答案 3 :(得分:0)

TBL#Sell2为空,您基本上只想为TBL#Sell中的每一行提供一个数字。您可以在不使用TBL#Sell2的情况下执行此操作。

添加临时标识列,将值移至SellId,删除临时列。

alter table TBL#Sell add SellId_tmp int not null identity
go
update TBL#Sell set SellId = SellId_tmp
go
alter table TBL#Sell drop column SellId_tmp

另一种方法是使用带有row_number()的CTE。

;with cte as
(
  select *,
    row_number() over(order by (select(1))) as rn
  from TBL#Sell
) 
update cte set
  SellId = rn