设为首页 收藏本站
查看: 910|回复: 0

[经验分享] SQL Server返回插入数据的ID和受影响的行数

[复制链接]

尚未签到

发表于 2017-7-13 19:23:09 | 显示全部楼层 |阅读模式
  首先看看数据库里面的数据(S_Id为自增长标识列):
DSC0000.png

  sql server 中返回上一次插入数据的ID(标识值)有三种方式:
  第一种 @@IDENTITY:



insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
values('013','卫庄','男','185');

select @@IDENTITY        
  @@IDENTITY可以返回当前连接所有范围内插入最后所生成的标识值(包括任何调用的存储过程和触发器)。这个函数不只是可以适用于表。函数返回的值是最后表插入行生成的标识值。比如,现在有一个a表和一个b表,a表插入一条数据并触发 trigger (触发器)为b表插入一条数据,这时@@IDENTITY返回的其实是b表的标识列的值,因为@@IDENTITY它总是获取最后一条变更数据的自增字段的值。@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
  第二种 IDENT_CURRENT:



insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
values('014','大司命','女','183');

select IDENT_CURRENT('Student')        
  IDENT_CURRENT()是一个函数,它有一个参数,它的参数就是指定要返回的标识列的值的表名。
  IDENT_CURRENT()返回为任何会话和任何作用域中的特定表最后生成的标识值, 不受作用域和会话的限制,而受限于指定的表。
  第三种 SCOPE_IDENTITY:



insert into Student(S_StuNo,S_Name,S_Sex,S_Height)
values('015','月儿','女','165');

select SCOPE_IDENTITY()        
  SCOPE_IDENTITY()返回为当前会话和当前作用域中的任何表最后生成的标识值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。
  IDENT_INCR 用法:




SELECT IDENT_INCR('Student')   
  SELECT IDENT_INCR('TableName'),一个参数,'TableName' 表示指定表的表名或视图名。
  返回指定表的标识字段的增量值(就是自增值,每插入一条新数值序列增加的数值)。
  IDENT_SEED 用法:




select IDENT_SEED('Student')   
  select IDENT_SEED('TableName'),一个参数,'TableName' 表示指定表的表名或视图名。
  返回指定表的标识字段的种子值(即起始值,指定标识列从哪个数值开始)。
  sql 获取标识递增的下一个值:




select IDENT_CURRENT('Student') + IDENT_INCR('Student')
  sql 返回受上一语句影响的行数:
  @@ROWCOUNT 返回受影响的行数(insert、select、delete、update):



select * from Student where S_Sex='女'
select @@ROWCOUNT   
  如果行数大于 20 亿,请使用 ROWCOUNT_BIG()。



select * from Student where S_Sex='男';

select ROWCOUNT_BIG()   
  rowcount 用法:
  rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,例如下面的示例:




set rowcount 5
select * from Student where S_Sex='男';

set rowcount 5
select * from Student where S_Sex='男' order by S_Id desc;
  也就是说在查询上面 rowcount 有着 top [number] 同样的效果。
  要取消set rowcount的限定,只要设置 set rowcount 0 就可以了。
  注意:set rowcount的限定对修改,删除一样有效。比如下面的示例:



set rowcount 3
update Student set S_BirthDate='2017-01-01'
where S_Id<20
select @@ROWCOUNT   


set rowcount 5
delete from Student where S_BirthDate is null
select @@ROWCOUNT   
set rowcount 0
select * from Student

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-393550-1-1.html 上篇帖子: SQL Server 2008 R2没有卸载干净 下篇帖子: sql server 2012 从删库到跑路
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表