触发器与@@IDENTITY的
2007-01-19 10:38
369 查看
我写的代码出现重大问题,因为使用触发器监视数据库表的插入来生成事件信息记录,结果造成原数据表的的数据出现大量严重错误。原因是在插入的存储过程中访问了@@IDENTITY来作进一步操作,而触发器的中途拦截并作了插入操作更改了@@IDENTITY,这是所有人都没有考虑到的
。这个问题很晚才被发现,因此数据库出现大量的错误数据,昨天当我知道之后立刻意识到是触发器的问题,而今天则发现可能影响到的范围还要广。目前能做出的唯一修改就是检查所有Insert的存储过程中的@@IDENTITY,全部改成SCOPE_IDENTITY,并且手动修改数据库。
所以得出一个经验:少用触发器(最好不用),此外最好使用SCOPE_IDENTITY代替@@IDENTITY
。这个问题很晚才被发现,因此数据库出现大量的错误数据,昨天当我知道之后立刻意识到是触发器的问题,而今天则发现可能影响到的范围还要广。目前能做出的唯一修改就是检查所有Insert的存储过程中的@@IDENTITY,全部改成SCOPE_IDENTITY,并且手动修改数据库。
所以得出一个经验:少用触发器(最好不用),此外最好使用SCOPE_IDENTITY代替@@IDENTITY
相关文章推荐
- A. 将 @@IDENTITY 和 SCOPE_IDENTITY 用于触发器
- @@IDENTITY在加触发器时返回错误的ID值
- 关于使用触发器时使用@@identity的问题
- @@identity与scope_identity()函数的区别
- @@IDENTITY与SCOPE_IDENTITY()
- @@IDENTITY与SCOPE_IDENTITY()
- SQL 获取最新ID,scope_identity() ,@@identity,ident_current
- 加了触发器后的Select @@identity失效的解决
- SCOPE_IDENTITY()、@@IDENTITY、IDENT_CURRENT() 用法
- SCOPE_IDENTITY和@@identity的区别
- SCOPE_IDENTITY()、@@IDENTITY、IDENT_CURRENT()
- @@IDENTITY,SCOPE_IDENTITY()和IDENT_CURRENT('TableName') 用法
- SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别
- SqlServer中用@@IDENTITY取最新ID不准的问题
- 糟糕的@@identity,SCOPE_IDENTITY ,IDENT_CURRENT
- 使用SCOPE_IDENTITY()代替@@IDENTITY的原因
- Difference between SCOPE_IDENTITY(), @@IDENTITY, and IDENT_CURRENT
- MSSql Server 中@@IDENTITY与SCOPE_IDENTITY()
- 解析@@IDENTITY与SCOPE_IDENTITY()(转)
- @@identity的作用是返回最后插入的标识值