获取标识值并插入其他表

时间:2015-05-20 16:07:37

标签: sql sql-server

我有表1的标识元素(ID列)。

我创建了一个SP,我插入到Table1中,然后我希望将该标识值插入到其他表中。

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。

或者还有其他好方法吗?

1 个答案:

答案 0 :(得分:1)

使用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的this article

<强>更新

要根据评论中的问题启用回滚,您可以使用transactionTry...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