我有表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。
或者还有其他好方法吗?
答案 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
<强>更新强>
要根据评论中的问题启用回滚,您可以使用transaction和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