![](/img/trans.png)
[英]SQL: Is it possible to insert into two tables at the same time with autogenerated id output from first table into second
[英]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.