【问题标题】:Getting the Identity value and Inserting into Other table获取标识值并插入其他表
【发布时间】:2015-05-21 00:21:18
【问题描述】:

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

我在插入 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中。

或者还有什么好的方法吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案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

    更新

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

    【讨论】:

    • 我怎样才能在这里回滚,这样如果第一个插入不能正常工作,那么第二个也不应该正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多