`
逆风的香1314
  • 浏览: 1386007 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL SERVER 2000 中的标识值获取函数

阅读更多

SQL SERVER 2000 中的标识值获取函数

IDENTITY(标识)列,也有很多人称之为自增列,在SQL Server 2000中,标识列通过IDENTITY来定义,下面是与获取最后插入记录的标识值有关的函数的一个示例说明

    SQL Server 中,可以使用 SCOPE_IDENTITY()、 @@IDENTITY 、 IDENT_CURRENT() 来取得最后插入记录的值值,它们的区别在于:
SCOPE_IDENTITY() 返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
@@IDENTITY       返回在当前会话的所有表中生成的最后一个标识值
IDENT_CURRENT()  返回为任何会话和任何作用域中的指定表最后生成的标识值
下面以一个示例来说明它们的区别

-- a) 示例代码

-- ===========================================
-- 创建测试表
-- ===========================================
USE tempdb
GO

CREATE TABLE t1(id int IDENTITY,col int)
INSERT t1 SELECT 1
UNION ALL SELECT 2
CREATE TABLE t2(id int IDENTITY,col int)
GO

CREATE TRIGGER TR_insert_t2 ON t2
FOR INSERT
AS
    INSERT t1 SELECT 3
GO

-- ===========================================
-- 测试三个函数..1
-- ===========================================
INSERT t2 VALUES(1)
SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
    [@@IDENTITY]=@@IDENTITY,
    [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),
    [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')

/*--结果
SCOPE_IDENTITY()   @@IDENTITY   IDENT_CURRENT() For t1     IDENT_CURRENT() For t2                   
------------------ ------------ -------------------------- -----------------------
1                  3            3                          1

(所影响的行数为 1 行)
--*/
GO

-- ===========================================
-- 测试三个函数..2
-- ===========================================
INSERT t1 VALUES(10)
SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
    [@@IDENTITY]=@@IDENTITY,
    [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),
    [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')

/*--结果
SCOPE_IDENTITY()   @@IDENTITY   IDENT_CURRENT() For t1     IDENT_CURRENT() For t2                   
------------------ ------------ -------------------------- -----------------------
4                  4            4                          1

(所影响的行数为 1 行)
--*/
GO

-- ===========================================
-- 测试三个函数..3
-- ** 开启一个新连接,执行下面的代码 **
-- ===========================================
SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),
    [@@IDENTITY]=@@IDENTITY,
    [IDENT_CURRENT() For t1]=IDENT_CURRENT(N't1'),
    [IDENT_CURRENT() For t2]=IDENT_CURRENT(N't2')

/*--结果
SCOPE_IDENTITY()   @@IDENTITY   IDENT_CURRENT() For t1     IDENT_CURRENT() For t2                   
------------------ ------------ -------------------------- -----------------------
NULL               NULL         4                         &n

--===========================================
-- 删除测试环境
-- ===========================================
DROP TABLE t1,t2

-- b) 代码结果说明

从上面的代码可以看到:
IDENT_CURRENT()  始终返回指定表最后插入的标识值
@@IDENTITY       返回当前会话的标识值,无论是否在同一个作用域,在测试1、2中,可以看到它返回的是触发器中插入记录的标识值,而在测试3中,因为当前会话无插入记录,所以返回NULL
SCOPE_IDENTITY() 返回当前会话同一作用域的标识值,所以在测试1、2中,它返回的值不受触发器的影响,而在测试3中,因为当前会话无插入记录,所以返回NULL

分享到:
评论

相关推荐

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

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

    本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关...

    Microsoft SQL Server 2005 Express Edition SP3

    对于 SQL Server 2000 中的 Microsoft 数据访问组件 (MDAC) 客户端,请使用 SQL Server 2000 客户端网络实用工具。对于 SQL 本机客户端,请使用“添加或删除程序”卸载 SQL 本机客户端。在群集中,请卸载所有节点中...

    sqlserver2000基础(高手也有用)

    2.2.2 日期信息获取函数 26 2.2.3 日期差值计算函数 27 2.2.4 其他日期处理相关函数 27 2.3 日期选项设置 29 2.3.1 default language选项 30 2.3.2 SET DATEFIRST 31 2.3.3 SET DATEFORMAT 31 2.3.4 ...

    经典SQL脚本大全

    │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...

    21天学会SQL

    SQL Server 2008是微软的SQL Server数据库中的最新版本,在该版本的数据库产品中融入了更多商业智能的内容。本书中也使用了一篇专门讲解了与商业智能有关的一些内容。 本书总分为5篇,共21章。第一篇主要讲解数据库...

    经典SQL语句大全

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    sql经典语句一部分

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    C#开发经验技巧宝典

    0966 SQL Server 2000无法安装的解决办法 565 20.3 其他 565 0967 如何判断记录是否为NULL 565 0968 建立Oracle数据库连接 566 0969 如何在数据表中设置主键 566 0970 DataSet读取XML文件中数据作为数据...

    数据库操作语句大全(sql)

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db ...

    SQL语法大全

    用 rs("别名") 获取统的计值,其它函数运用同上。 (5) 数据表的建立和删除: CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) 例:CREATE TABLE tab01(name varchar(50),datetime default ...

    C#.net_经典编程例子400个

    206 4.8 图像识别 207 实例143 查看图片的像素 207 实例144 获取指定点的RGB值 207 4.9 图像工具 208 实例145 获取图片类型 208 实例146 简单画图程序 209 实例147 看图工具 213...

    Oracle9i的init.ora参数中文说明

    说明: 如果值为TRUE, 即使源长度比目标长度 (SQL92 兼容) 更长, 也允许分配数据。 值范围: TRUE | FALSE 默认值: FALSE serializable: 说明: 确定查询是否获取表级的读取锁, 以防止在包含该查询的事务处理被提交...

    C#编程经验技巧宝典

    93 <br>0144 如何自定义货币值中的小数点 94 <br>0145 如何自定义货币值中小数点左边数字分组字符 94 <br>0146 如何自定义货币值中小数点左边每一组的位数 95 <br>0147 如何自定义百分比值中小数...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例226 对SQLServer数据库进行录入和提取多媒体文件 实例227 对SQL Server数据库进行录入和存储Word文档 8.10 数据备份恢复 实例228 Access数据库备份与还原 实例229 SQL Server数据库备份与恢复 实例230 ...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例226 对SQLServer数据库进行录入和提取多媒体文件 实例227 对SQL Server数据库进行录入和存储Word文档 8.10 数据备份恢复 实例228 Access数据库备份与还原 实例229 SQL Server数据库备份与恢复 实例230 ...

Global site tag (gtag.js) - Google Analytics