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
答案 0 :(得分:1)
您可以使用触发器:
http://msdn.microsoft.com/en-us/magazine/cc164047.aspx
http://msdn.microsoft.com/en-us/library/aa258254(v=sql.80).aspx
答案 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