SQL Server:使用第一个插入的输出插入第二个表

时间:2014-02-22 14:21:19

标签: sql sql-server output insert-into

我有一个基本的存储过程,它将新记录添加到具有如下结构的表中。该表还有一个“itemID”列,设置为自动递增以为每条记录创建唯一ID。

我想使用Output从我插入的新记录中获取此ID,然后使用它将新记录添加到另一个表( Table2 with column colD,colE,colF )。表2中的colF应该是下面的输出,因为这是链接两个表的id。

有人可以告诉我这是如何工作的,因为我对SQL很陌生并且之前从未这样做过吗?

我的存储过程(示例):

ALTER PROCEDURE [dbo].[CreateStuff]
    @colA datetime,
    @colB varchar(50),
    @colC nvarchar(20)
AS
BEGIN
SET NOCOUNT ON;
    INSERT INTO Table1
        (
            colA,
            colB,
            colC
        )
    SELECT  @colA,
            @colB,
            @colC
END

非常感谢你提供任何帮助,蒂姆。

3 个答案:

答案 0 :(得分:3)

BEGIN  
SET NOCOUNT ON;

 /* Here declare a Table Variable */

DECLARE @Table_Var TABLE(itemID INT)



    INSERT INTO Table1(colA,colB,colC)
    OUTPUT inserted.itemID  INTO @Table_Var(itemID)
    SELECT  @colA,@colB,@colC


    /* Now do the insert into Table 2*/

    INSERT INTO TABLE2
    SELECT itemID FROM @Table_Var
END

SCOPE_IDENTITY()仅在您执行单个Insert时才有用,并且它是您想要捕获的IDENTITY列。它将仅返回最后生成的标识值。

除此之外,如果您正在进行多次插入或它不是标识列,那么您应该使用OUTPUT子句以及表vairable / temp表来捕获插入的值。然后在以后做任何你想做的事情(插入另一个表/记录任何东西)。

要了解有关OUTPUT Clause的更多信息,请查看此链接。

答案 1 :(得分:2)

尝试SCOPE_IDENTITY()

ALTER PROCEDURE [dbo].[CreateStuff]
    @colA datetime,
    @colB varchar(50),
    @colC nvarchar(20),
    @Valueout int output
AS
BEGIN
SET NOCOUNT ON;
    INSERT INTO Table1
        (
            colA,
            colB,
            colC
        )
    SELECT  @colA,
            @colB,
            @colC
SET @Valueout = SCOPE_IDENTITY()
END

答案 2 :(得分:1)

您可以按如下方式在表格上创建触发器:

    CREATE TRIGGER Trigger_Name 
       ON  Table_Name 
       AFTER INSERT,UPDATE
    AS 
    BEGIN
       SET NOCOUNT ON;

       INSERT INTO Table1 ( colA, colB, colC )
       SELECT  colA, colB, colC FROM Inserted

    END