使用SCOPE_IDENTITY()对从select中取出的每一行执行插入

时间:2017-05-25 06:47:24

标签: sql-server insert

我需要在Table1中为Table2中的每一行插入行。

此外,我需要在Table1中为每个新插入的行插入一个带有插入记录ID的新行。

我的脚本如下:

DECLARE @Id INT;

BEGIN TRAN

BEGIN TRY

INSERT INTO dbo.Table1(UN_ID, AT_ID, AA_SUM, AA_START_DATE, AA_END_DATE, WR_ID) 
SELECT 
    116,        
    3,          
    100,        
    '20170501', 
    '20170601', 
    WR_ID       
FROM Table2


SELECT @Id = SCOPE_IDENTITY()
INSERT INTO dbo.Table3 VALUES (@Id, 10)

COMMIT TRAN

END TRY
BEGIN CATCH
    ROLLBACK TRAN
END CATCH

但是这个脚本只在Table3中插入一行。

如何在Table3中插入Table1中每个新插入的行?

编辑:表1具有自动递增的主键ID。该ID应插入表3中。

1 个答案:

答案 0 :(得分:1)

这可以使用如下的输出子句来完成,然后声明一个表变量与表3具有相同的结构。

declare @tbl3 table(id int)

INSERT INTO dbo.Table1(UN_ID, AT_ID, AA_SUM, AA_START_DATE, AA_END_DATE, WR_ID)
output Inserted.ID into @tbl3
SELECT 
    116,        
    3,          
    100,        
    '20170501', 
    '20170601', 
    WR_ID       
FROM Table2

insert into dbo.table3 
select id,10 from @tbl3