zoukankan      html  css  js  c++  java
  • Sqlserver @@IDENTITY 和 SCOPE_IDENTITY() 的使用

    为啥单独写这个呢. 有个系统用了7年 好好的 没点问题.今天早上正在愉快搬砖中. 突然 邮件满天飞.说提交数据出问题了. 一看错误.主键重复. 我主键是自增的怎么重复呢 , 背景是主表为A表/从表为B 表 在A表产生一个自增值 然后作为主键插入到B表. 我直接 在数据库测试插入个人习惯 用 SCOPE_IDENTITY()  没有问题 ,  最后检查代码发现.获取A表自增的时候 使用的是  @@IDENTITY, 随后改掉正常了

    问题产生的原因就要从 这两个获取当前 会话的自增的规则来讲了

      SCOPE_IDENTITY()  只返回插入到当前作用域中的值

      @@IDENTITY   返回在当前会话中的任何表内所生成的最后一个标识值

    而在我刚刚的问题中. 产生的原因就是同事在 A表中加了个触发器在A插入数据时同时在另一个有自增的表插入一条数据, 按上面的规则 @@IDENTITY    返回当前会话的 不管是哪个地方的. 所以它返回了触发器里插入另一个表时产生的自增值, 而 SCOPE_IDENTITY 对于当前的作用域来说 触发器里的事情已经超出它的域了所以是不管的.就能正确返回.

    因为 日常返回自增时按使用情况 决定用哪一个 不要盲目的使用  @@IDENTITY 

  • 相关阅读:
    数据库封装类使用
    C# Socket-TCP异步编程原理详解附源码
    Mysql 5.7安装与配置-默认密码
    Python-Django WebAPi基本使用方法
    C# 微信小程序获取openid sessionkey
    voith项目配置服务程序
    社区安防系统
    数据结构和算法-一元多项式运算算法(加法)
    数据结构和算法-贪婪算法
    Oracle分页SQL语句
  • 原文地址:https://www.cnblogs.com/itstac/p/14596170.html
Copyright © 2011-2022 走看看