SQL Server 标识函数:详细比较
@@IDENTITY
、SCOPE_IDENTITY()
、IDENT_CURRENT()
和 IDENTITY()
都与从 SQL Server 中的标识列检索值相关,但它们在范围和应用程序上存在显着差异。
了解 SQL Server 标识函数中的范围
“范围”是指生成身份值的上下文。 这可以是:
功能分解
@@IDENTITY
: 返回在 当前会话 中生成的最后一个标识值,无论范围如何(查询、存储过程或触发器)。
SCOPE_IDENTITY()
: 返回在当前会话和范围内生成的最后一个身份值。这是最常推荐的功能,因为它提供更精确的结果。
IDENT_CURRENT('table_name')
: 返回为特定表生成的最后一个标识值,无论会话或范围如何。 当您需要跨不同会话或上下文的特定表的最后一个标识值时,这非常有用。
IDENTITY()
: 这是不用于检索身份值。 它是使用 SELECT ... INTO
语法创建表时用于定义标识列的关键字。
说明性场景
让我们检查不同的场景以突出差异:
单个 INSERT
语句: 如果单个 INSERT
语句添加一行,SCOPE_IDENTITY()
和 @@IDENTITY
将返回相同的值。
基于触发器的插入: 如果触发器在将 INSERT
插入第一个表后将行插入到第二个表中,SCOPE_IDENTITY()
将返回受当前语句直接影响的表的标识(第一个表),而 @@IDENTITY
将返回会话中最后受影响的表(可能是第二个表)的身份。
选择正确的功能
对于大多数情况,SCOPE_IDENTITY()
是首选,因为它提供特定于上下文的结果。 当您需要最新的身份值(无论其在会话中的来源如何)时,@@IDENTITY
非常有用。当您需要特定表的最后一个标识值(无论当前会话如何)时,IDENT_CURRENT()
至关重要。 请记住,IDENTITY()
用于定义标识列,而不是检索它们的值。
以上是SQL Server 中的'@@IDENTITY”、'SCOPE_IDENTITY()”、'IDENT_CURRENT()”和'IDENTITY()”有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!