繁体   English   中英

获取标识值并将其插入其他表

[英]Getting the Identity value and Inserting into Other table

我有一个用于表1(标识列)的标识元素。

我在插入Table1的位置制作了一个SP,然后希望将该标识值插入其他表。

Insert into Table 1 values (Name, RollNo) -- Get the Id of the identity element and insert into other table
Insert into Table 2 values (ID, Standard)

我试图做一个临时表

DECLARE @OutputTbl TABLE (ID INT)

Insert into Table 1 values (Name, RollNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)

//但是现在我应该如何插入Table2。

还是还有其他好的方法?

使用SCOPE_IDENTITY()获取在存储过程中最后生成的身份。

从MSDN:

返回插入到同一作用域的标识列中的最后一个标识值。 范围是一个模块:存储过程,触发器,函数或批处理。 因此,如果两个语句位于相同的存储过程,函数或批处理中,则它们属于同一范围。

您可以使用以下tsql:

DECLARE @ScopeIdentity int

INSERT INTO Table1 VALUES (Name, RollNo)
SELECT @ScopeIdentity = SCOPE_IDENTITY()
INSERT INTO Table2 VALUES (@ScopeIdentity, Standard)

有关更多信息,您可以阅读Pinal Dave的这篇文章

更新

要根据评论中的问题启用回滚,可以使用事务Try ... catch

DECLARE @ScopeIdentity int
BEGIN TRY
BEGIN TRANSACTION

INSERT INTO Table1 VALUES (Name, RollNo)
SELECT @ScopeIdentity = SCOPE_IDENTITY()
INSERT INTO Table2 VALUES (@ScopeIdentity, Standard)

COMMIT TRANSACTION
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0
        ROLLBACK TRANSACTION
END CATCH

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM