【发布时间】:2018-05-10 07:46:04
【问题描述】:
我对 SQL Server 中 SCOPE_IDENTITY() 的文档和行为感到有些困惑。
这个页面https://docs.microsoft.com/en-us/sql/t-sql/functions/scope-identity-transact-sql?view=sql-server-2017 说这个关于SCOPE_IDENTITY():
返回插入到标识列中的最后一个标识值 相同的范围。作用域是一个模块:一个存储过程、触发器、 函数或批处理。因此,如果两个语句在同一个 存储过程、函数或批处理,它们在同一范围内。
它包含这个例子
USE AdventureWorks2012;
GO
INSERT INTO Person.ContactType ([Name]) VALUES ('Assistant to the Manager');
GO
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];
GO
SELECT @@IDENTITY AS [@@IDENTITY];
GO
返回
SCOPE_IDENTITY
21
@@IDENTITY
21
从文档中,我认为 SCOPE_IDENTITY() 的结果将为 NULL,因为 SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];与 INSERT 命令在不同的 batch 中执行(因为它在 GO 之后)...我在这里缺少什么?
【问题讨论】:
-
您使用什么程序将这些命令发送到数据库服务器?
-
该示例来自文档,但我们在 SQL Server Management Studio 中看到了相同的行为(针对不同的表)。
标签: sql sql-server tsql