`
feiliboos
  • 浏览: 664568 次
文章分类
社区版块
存档分类
最新评论

在SQL SERVER中获取系统生成的标识值

 
阅读更多

在SQL SERVER中可以使用三种方法来获取系统生成的标识值:
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 这三个函数都返回最后生成的标识值。但是,它们在定义"最后"的作用域和会话上不同。

  • @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
  • SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值。
  • IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。

@@IDENTITY

返回最后插入的标识值。

语法
@@IDENTITY

返回类型
numeric

注释
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

如果在你进行insert操作的时间和检查@@IDENTITY的时间之间有另一个insert操作被执行,@@IDENTITY返回的不是系统为你的insert所生成的标识值,而是它为最近的一个insert操作所生成的标识值。

SCOPE_IDENTITY

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

语法
SCOPE_IDENTITY( )

返回类型
sql_variant

注释
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 值。
建议使用这个方法获取系统生成的标识值,因为这是一种最安全的确定你最近生成的标识值的方法。

IDENT_CURRENT

返回为任何会话和任何作用域中的指定表最后生成的标识值。

语法
IDENT_CURRENT('table_name')

参数
table_name

是将要返回其标识值的表的名称。table_name 的数据类型为 varchar,没有默认值。

返回类型
sql_variant

注释
IDENT_CURRENT 很类似于标识函数 SCOPE_IDENTITY ,但是IDENT_CURRENT 只会返回指定表的标识值,不管对其他的表是否进行过insert操作,这样可以防止深藏在触发器中的另一个insert操作影响到这个函数的返回结果。

分享到:
评论

相关推荐

    Microsoft SQL Server 2005 Express Edition SP3

    如果在维护模式下安装新的 SQL Server 2005 组件,系统将提示您指定 SQL Server 2005 安装媒体中 Setup.exe 文件的位置。指定该文件位置时,路径中一定要包含“Setup.exe”。例如,路径“D:\”将失败,而“D:\Setup....

    SqlServer数据字典生成器

    SqlServer数据字典生成器。输入 SqlServer 服务器IP、登录用户名、登录密码及数据库名称,检索出用户表名称,选择所需的表直接生成WORD格式数据字典,支持全选。本版本可导出以下属性:字段名、标识、主键、类型、...

    数据库编程期末答疑,卷子讲解,SQL server相关操作讲解,如有侵权请联系删除

    4. 运行CreateTeaching.sql在系统数据库tempdb中生成解答用数据库对象,在SSMS中查询分析器中设计并调试如下查询,把SQL脚本代码分别保存到指定的SQL程序文件中。每小题3分,共15分 (1) 新增一位同学:200215129,...

    Sqlserver2000经典脚本

    └─其他 │ 生成GB2312汉字表.sql │ 生成GBK汉字表.sql │ 自动获取汉字笔画.sql │ ├─第05章 │ │ 5.1.1 SET IDENTITY_INSERT 中的几个问题.sql │ │ 5.1.1 修改标识值的示例....

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    7.2.1 在SQL Server Management Studio中查看数据库的信息 7.2.2 使用T-SQL查看数据库信息 7.2.3 检查系统和示例数据库 7.2.4 检查数据库对象 7.3 创建数据库 7.3.1 在SQL Server Management Studio中创建数据库 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    7.2.1 在SQL Server Management Studio中查看数据库的信息 7.2.2 使用T-SQL查看数据库信息 7.2.3 检查系统和示例数据库 7.2.4 检查数据库对象 7.3 创建数据库 7.3.1 在SQL Server Management Studio中创建数据库 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part2

    7.2.1 在SQL Server Management Studio中查看数据库的信息 7.2.2 使用T-SQL查看数据库信息 7.2.3 检查系统和示例数据库 7.2.4 检查数据库对象 7.3 创建数据库 7.3.1 在SQL Server Management Studio中创建数据库 ...

    SQL SERVER 2000开发与管理应用实例

    14.1.2 仅在系统数据库中存在的系统表 424 14.1.3 系统表应用中三个重要的系统存储过程 426 14.2 系统表在对象信息检索中的应用 429 14.2.1 搜索指定的对象所处的数据库 429 14.2.2 获取存储过程参数...

    用于生成数据字典的SQL语句

    /*SQL Server数据库字典(查询所有的表结构)*/ SELECT TOP 100 PERCENT --a.id, CASE WHEN a.colorder = 1 THEN d.name ELSE '' END AS 表名, CASE WHEN a.colorder = 1 THEN isnull(f.value, '') ELSE '' END AS ...

    SQL.Server.2008管理员必备指南.part2.rar(2/4)

     7.2.1 在SQL Server Management Studio中查看数据库的信息 161  7.2.2 使用T-SQL查看数据库信息 163  7.2.3 检查系统和示例数据库 164  7.2.4 检查数据库对象 164  7.3 创建数据库 166  7.3.1 在SQL Server ...

    SQL.Server.2008管理员必备指南.part1.rar(1/4)

     7.2.1 在SQL Server Management Studio中查看数据库的信息 161  7.2.2 使用T-SQL查看数据库信息 163  7.2.3 检查系统和示例数据库 164  7.2.4 检查数据库对象 164  7.3 创建数据库 166  7.3.1 在SQL Server ...

    Log Explorer for SQL Server v4.22 含注册机

    服务器端代理是保存在SQLServer主机中的一个只读存储过程,他的作用是接受客户端请求,读取在线事物日志块并通过网络传给客户端软件,由客户端软件来读取这些原始的数据块来完成Log Explore所提供的所有功能。...

    jsp+sqlserver 2000投票问卷管理系统

    \questionnaire.sql SQL Server数据库生成脚本文件 \shpowquestion.jsp 显示投票 \thanks.jsp 投票结果确认 \showresult.jsp 用户查看投票结果(受管理员限制) \opendata.jsp 打开数据库 \convert.jsp 处理中文字符...

    SqlServer Mysql数据库修改自增列的值及相应问题的解决方案

    由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 ‘自增列名称‘)。sql server我测试是2008、2012和2014,都不允许...

    SQL.Server.2008管理员必备指南.part4.rar(4/4)

     7.2.1 在SQL Server Management Studio中查看数据库的信息 161  7.2.2 使用T-SQL查看数据库信息 163  7.2.3 检查系统和示例数据库 164  7.2.4 检查数据库对象 164  7.3 创建数据库 166  7.3.1 在SQL Server ...

    SQL server 2005中设置自动编号字段的方法

    在包含标识列的表中插入值时,Microsoft SQL Server 将基于上一次使用的标识值(标识种子属性)和在创建列时指定的增量值(标识增量属性)自动生成下一个标识符。 注意: 只能为不允许空值且数据类型为 decimal、int...

    sqlserver数据库主键的生成方式小结(sqlserver,mysql)

    其缺点也在于此,多数的数据库不提供直接获取标识ID的方式,对于开发人员来说产生ID的方式是透明的,开发人员几乎无法干预此项。对于数据的迁移也不是很方便。 由于存在上面的利弊,这种自增长的ID一般多用于设计...

    基于wxpython和SQLSERVER银行数据库设计

    开户:新用户通过提供一些基本信息实现开户操作,成功开户后会返回随机生成的银行卡号作为标志,每位用户只可在该系统下绑定一张银行卡。 登录:用户可以通过开户操作所得到的银行卡号及自己设定的密码在登录界面...

    sqlserver2000基础(高手也有用)

    14.1.2 仅在系统数据库中存在的系统表 424 14.1.3 系统表应用中三个重要的系统存储过程 426 14.2 系统表在对象信息检索中的应用 429 14.2.1 搜索指定的对象所处的数据库 429 14.2.2 获取存储过程参数定义 ...

    SQL.Server.2008管理员必备指南.part3.rar(3/4)

     7.2.1 在SQL Server Management Studio中查看数据库的信息 161  7.2.2 使用T-SQL查看数据库信息 163  7.2.3 检查系统和示例数据库 164  7.2.4 检查数据库对象 164  7.3 创建数据库 166  7.3.1 在SQL Server ...

Global site tag (gtag.js) - Google Analytics