簡體   English   中英

SQL Server:使用第一次插入的輸出插入第二個表

[英]SQL Server: Use output from first insert to insert into second table

我有一個基本的存儲過程,它將新記錄添加到具有如下結構的表中。 該表還有一列“itemID”,該列設置為自動遞增,以便為每條記錄創建唯一 ID。

我想使用輸出從我插入的新記錄中獲取此 ID,然后使用它向另一個表(帶有 colD、colE、colF 列的 Table2)添加新記錄。 表 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

非常感謝您對此的任何幫助,蒂姆。

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 時SCOPE_IDENTITY() ,並且它是您要捕獲其值的 IDENTITY 列。 它只會返回最后一個 Generated Identity 值。

除此之外,如果您正在執行多個插入或者它不是標識列,那么您應該使用OUTPUT子句以及表變量/臨時表來捕獲插入的值。 然后在以后對它們的值做任何你想做的事情(插入另一個表/記錄任何東西)。

要了解有關OUTPUT Clause更多信息,請查看此鏈接。

嘗試使用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

您可以按如下方式在表上創建觸發器:

    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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM