交易之外的Scope_Identity

时间:2015-04-21 18:46:18

标签: sql-server

我正在查看我继承的存储过程中的一些SQL,而且它让我摸不着头脑:

CREATE PROCEDURE [dbo].[sp_AddPerson] 
(   @Name NVARCHAR(22),
    @Age INT
)
AS
    BEGIN TRANSACTION;
    INSERT INTO [dbo].[Person]
    ([Name], [Age])
    VALUES
    (@Name, @Age);
    COMMIT TRANSACTION;
    SET @newId = SCOPE_IDENTITY();
    SELECT TOP 1 *
        FROM [dbo].[Person]
        WHERE [PersonId] = @newId;

这里的交易是否有一些价值我不明白?我当然不是DBA,但事务应该是确保多个命令的事务行为,不是吗?

1 个答案:

答案 0 :(得分:0)

该交易对SCOPE_IDENTITY无效,后者返回

  

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

MSDN