【问题标题】:Perform insert for each row taken from a select with SCOPE_IDENTITY()使用 SCOPE_IDENTITY() 对从选择中取出的每一行执行插入
【发布时间】:2017-05-25 06:47:23
【问题描述】:

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

我还需要为 Table1 中的每个新插入行在 Table3 中插入​​一个带有插入记录 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 中的每个新插入行插入?

编辑:Table1 具有自动递增的主键 ID。此 ID 应插入 Table3 中。

【问题讨论】:

    标签: sql-server insert


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-14
      • 2016-04-21
      • 2016-06-30
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      相关资源
      最近更新 更多