SCOPE_IDENTITY()
2017-08-28 11:48
309 查看
@@IDENTYITY,SCOPE_IDENTITY的主要区别:在有触发器中而且触发器的内容里面含有插入标识符的操作的时候,@@IDENTITY则返回的是触发器里面新插入标识符的值而SCOPE_IDENTITY则是不变,即离该语句上面最近的标识符的值。
SCOPE_IDENTITY()测试用例:
参考资料:https://msdn.microsoft.com/zh-cn/library/ms190315(v=sql.90).aspx
SCOPE_IDENTITY()测试用例:
--会话1,第一条返回1,第二条还是返回1,可得知SCOPE_IDENTITY()获取到的是当前会话最近的插入成功的标识符的值 INSERT INTO t(name) values('插入一条') ; SELECT SCOPE_IDENTITY(); INSERT INTO t SELECT '0个影响' FROM t WHERE 1=2 SELECT SCOPE_IDENTITY()
--会话1,返回批量插入的最后一个标识符的值(这里是4),所以这里max(id)返回的值和SCOPE_IDENTITY()的值是相等的 INSERT INTO t(name) values('插入一条') ,('插入2条') ,('插入3条') SELECT MAX(ID) FROM t; SELECT SCOPE_IDENTITY();
-- 开启事务,然后回滚,SCOPE_IDENTITY()值不会消失 (这里SCOPE_IDENTITY()依旧会显示值,即使没有插入到数据库里面) BEGIN TRAN INSERT INTO t(name) values('插入xx条') SELECT SCOPE_IDENTITY() ROLLBACK TRAN select * from t where name='插入xx条'
--给T表添加一个触发器,触发器功能是给t2表(有主键,未设置标识符)插入一条记录,执行后返回的是T表的值。 INSERT INTO t(name) values('插入一条') SELECT SCOPE_IDENTITY() SELECT MAX(ID) FROM T2;
--给T表添加一个触发器,触发器功能是给t2表(无主键,未设置标识符)插入一条记录,执行后返回的是T表的值。 INSERT INTO t(name) values('插入一条') SELECT SCOPE_IDENTITY() SELECT MAX(ID) FROM T2;
--给T表添加一个触发器,触发器功能是给t2表(有主键,有设置标识符)插入一条记录,执行后返回的是T表的值(这个是和@@IDENTITY根本的不同,@@IDENTITY返回的是T2表的标识符的值) INSERT INTO t(name) values('插入一条') SELECT SCOPE_IDENTITY() SELECT MAX(ID) FROM T2;
--给T表添加一个触发器,触发器功能是给t2表(无主键,有设置标识符)插入一条记录,执行后返回的是T表的值(这个是和@@IDENTITY根本的不同,@@IDENTITY返回的是T2表的标识符的值) INSERT INTO t(name) values('插入一条') SELECT SCOPE_IDENTITY() SELECT MAX(ID) FROM T2;
BEGIN TRAN --获取会话级别无触发器情况下的最近批处理的标识符 INSERT INTO T(name) VALUES('插入一条数据') SELECT MAX(ID) FROM T; SELECT SCOPE_IDENTITY(); INSERT INTO T(name) VALUES('插入一条数据') SELECT MAX(ID) FROM T; SELECT SCOPE_IDENTITY(); COMMIT TRAN
BEGIN TRAN --获取会话级别无触发器情况下的最近批处理的标识符 INSERT INTO T(name) VALUES('插入一条数据') SELECT MAX(ID) FROM T; SELECT SCOPE_IDENTITY(); INSERT INTO T(name) VALUES('插入一条数据') SELECT MAX(ID) FROM T; SELECT SCOPE_IDENTITY(); COMMIT TRAN
参考资料:https://msdn.microsoft.com/zh-cn/library/ms190315(v=sql.90).aspx
相关文章推荐
- 浅谈SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
- SCOPE_IDENTITY和@@identity的区别
- 区分 @@IDENTITY,SCOPE_IDENTITY,IDENT_CURRENT
- SQL 获取最新ID,scope_identity() ,@@identity,ident_current
- @@IDENTITY与SCOPE_IDENTITY()
- SQL中取当前记录的ID----->SCOPE_IDENTITY()
- 在output 子句和 scope_identity() 混合使用的时候的注意事项
- SCOPE_IDENTITY()
- SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较 (转载)
- SCOPE_IDENTITY
- SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
- 关于SQL Identity的几种用法:scope_identity ident_current @@identity
- SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较
- 测试@@IDENTITY,SCOPE_IDENTITY,IDENT_CURRENT的区别
- SCOPE_IDENTITY和@@identity的区别
- 分享 .NET(C#,VB.NET,ADO.NET)中取自增字段值的方法 SCOPE_IDENTITY()
- @@IDENTITY,SCOPE_IDENTITY,IDENT_CURRENT,吉祥3宝
- SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的区别比较
- 获取SQL-SERVER数据库insert into操作的主键返回值,SCOPE_IDENTITY
- sql语句返回主键SCOPE_IDENTITY()