SCOPE_IDENTITY的作用

SCOPE_IDENTITY返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

语法SCOPE_IDENTITY( )

返回类型sql_variant

注释SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。 

IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。

SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。

假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。

@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。

SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。

有关说明,请参见示例。

示例下列示例将创建两个表 TZ 和 TY,并在 TZ 上创建一个 INSERT 触发器。当将某行插入表 TZ 中时,触发器 (Ztrig) 将激发并在 TY 中插入一行。

USE tempdbGOCREATE TABLE TZ (   Z_id  int IDENTITY(1,1)PRIMARY KEY,   Z_name varchar(20) NOT NULL)

INSERT TZ   VALUES (‘Lisa‘)INSERT TZ   VALUES (‘Mike‘)INSERT TZ   VALUES (‘Carla‘)

SELECT * FROM TZ

--Result set: This is how table TZ looksZ_id   Z_name-------------1      Lisa2      Mike3      Carla

CREATE TABLE TY (   Y_id  int IDENTITY(100,5)PRIMARY KEY,   Y_name varchar(20) NULL)

INSERT TY (Y_name)   VALUES (‘boathouse‘)INSERT TY (Y_name)   VALUES (‘rocks‘)INSERT TY (Y_name)   VALUES (‘elevator‘)

SELECT * FROM TY--Result set: This is how TY looks:Y_id  Y_name---------------100   boathouse105   rocks110   elevator

/*Create the trigger that inserts a row in table TY when a row is inserted in table TZ*/CREATE TRIGGER ZtrigON TZFOR INSERT AS    BEGIN   INSERT TY VALUES (‘‘)   END

/*FIRE the trigger and find out what identity values you get with the @@IDENTITY and SCOPE_IDENTITY functions*/INSERT TZ VALUES (‘Rosalie‘)

SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]GOSELECT   @@IDENTITY AS [@@IDENTITY]GO

--Here is the result set.SCOPE_IDENTITY4/*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/

@@IDENTITY115/*@@IDENTITY returned the last identity value inserted to TY by the trigger, which fired due to an earlier insert on TZ*/
时间: 2024-08-28 20:59:52

SCOPE_IDENTITY的作用的相关文章

SCOPE_IDENTITY() 和 @@identity

@@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于特定的作用域. 例如,有两个表 T1 和 T2,并且在 T1 上定义了 INSERT 触发器.当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行. 该方案演示了两个作用域:在 T1 上的插入,以及在 T2 通过触发器的插入. 假设 T1 和 T2 都有标识列,@@IDENTITY 和 SC

SQL查询 [SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别(比较)] ---转载

@@IDENTITY (Transact-SQL) 返回最后插入的标识值的系统函数. 备注 在一条 INSERT.SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值.如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL.如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值.如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将

SCOPE_IDENTITY的用法【转载】

SCOPE_IDENTITY   和   @@IDENTITY   的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量,取得插入记录的ID号但是有个问题就是,@@IDENTITY是全局的,所以在他的功能会体现在所有作用域,一个操作,一个触发器,一个存储过程叫做一个作用域,这时候如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果.这时候我们要使用SCOPE_IDENTITY

@@identity与scope_identity()函数的区别

@@IDENTITY 和SCOPE_IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值.但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值:@@IDENTITY 不受限于特定的作用域. 例如,有两个表 T1 和 T2,并且在 T1 上定义了 INSERT 触发器.当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行. 该方案演示了两个作用域:在 T1 上的插入,以及在 T2 通过触发器的插入. 假设 T1 和 T2 都有标识列,@@IDENTITY 和 SC

@@IDENTITY与SCOPE_IDENTITY的用法

SCOPE_IDENTITY   和   @@IDENTITY   的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量,取得插入记录的ID号但是有个问题就是,@@IDENTITY是全局的,所以在他的功能会体现在所有作用域,一个操作,一个触发器,一个存储过程叫做一个作用域,这时候如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果.这时候我们要使用SCOPE_IDENTITY

SCOPE_IDENTITY的用法

SCOPE_IDENTITY   和   @@IDENTITY   的作用都是取得返回在当前会话中的任何表内所生成的最后一个标识值,简单的说就是在执行一条插入语句之后使用@@IDENTITY的全局变量,取得插入记录的ID号但是有个问题就是,@@IDENTITY是全局的,所以在他的功能会体现在所有作用域,一个操作,一个触发器,一个存储过程叫做一个作用域,这时候如果出现多个作用域的情况的时候,@@IDENTITY所取得的ID号就是最后一个作用域产生的结果.这时候我们要使用SCOPE_IDENTITY

@jsonignore的作用

作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响. 如下: package com.hzboy.orm; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.pe

配置虚拟域名,hosts文件起作用

快速打开hosts方法 开始->运行->system32->回车 当前路径文件夹drivers\etc\hosts hosts文件起作用,目前楼主知道有两个可能原因 1.刷新dns cmd里面运行 ipconfig /flushdns 2.没配置前访问了一次域名,配置完之后浏览器没重启.所以不起作用 重新启动浏览器或者换一个浏览器

Linux中的环境变量配置文件及其作用

登录相关的配置文件: /etc/profile 范围:对所有用户生效 作用: a.定义USER变量 b.定义LOGNAME变量 c.定义MAIL变量 d.定义PATH变量 e.定义HOSTNAME变量 f.定义HISTSIZE变量 g.定义umask值 i.调用/etc/profile.d/*.sh文件 /etc/profile.d/*.sh 范围:对所有用户生效 说明:这是一族sh文件,没个都会被调用 例如: /etc/profile.d/lang.sh 作用:调用/etc/sysconfg/