代码之家  ›  专栏  ›  技术社区  ›  CFML_Developer

多次插入后获取插入的选定行的ID[重复]

  •  1
  • CFML_Developer  · 技术社区  · 5 年前

    我有一个正在循环中运行的查询,我正试图优化它

    INSERT INTO myTable (col1, col2, col3)
    OUTPUT inserted.id, SOURCE_ROW_ID_NEEDED_HERE
        SELECT col1, col2, col3 
        FROM myTable 
        WHERE col2 = 20 --any value
    

    我的问题是:col2=20可以有n行被插入,我需要新记录的源行的id。例如col2=20有3行,id为11,12,15。新插入的id是150151152。

    我需要

    11  150
    12  151
    15  152
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   Ilyes    5 年前

    你在找什么

    CREATE TABLE T1(
      Col1 INT IDENTITY(1, 1),
      Col2 INT,
      Col3 INT
    );
    
    CREATE TABLE T2(
      Col1 INT IDENTITY(1, 1),
      Col2 INT,
      Col3 INT
    );
    
    INSERT INTO T2(Col2, Col3) VALUES
    (11,  150),
    (12,  151),
    (15,  152);
    
    DECLARE @TT TABLE (ID INT, Col2 INT);
    
    SET IDENTITY_INSERT T1 ON;
    
    INSERT INTO T1 (Col1, Col2, Col3)
    OUTPUT INSERTED.Col1,
           INSERTED.Col2
    INTO @TT (ID, Col2)
    SELECT Col1,
           Col2,
           Col3
    FROM T2;
    
    SELECT *
    FROM @TT;
    
    SET IDENTITY_INSERT T1 OFF;
    

    Demo