我正在查看我继承的存储过程中的一些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,但事务应该是确保多个命令的事务行为,不是吗?
答案 0 :(得分:0)
该交易对SCOPE_IDENTITY
无效,后者返回
插入到标识列中的最后一个标识值 相同的范围。范围是一个模块:存储过程,触发器, 功能或批处理。因此,如果两个语句属于同一范围 它们处于相同的存储过程,功能或批处理中。