sql server 2005:使用@@identity安全吗?
我有一个程序,其中我在员工表中插入记录。nad 通过使用 @@identity 获得 empid 吗? 当这个过程将被多个用户同时调用时,它可能会返回同时插入的其他员工的身份。因为系统没有锁定身份?
- 代码 --empid 列的身份
插入员工(姓名)值('sahil'); 返回@@identity
参考sql server 2005:使用@@是否安全身份? 锁定身份问题
i have a procedure in which i am inserting record in employee table.nad getting empid by using @@identity ? when this procedure will be called by more than one user at same time,there can be possibility that it returns identity of some other employee inserted at same time.because there is no lock on identity by system?
--code
--identity on for empid column
insert into employee (name) values ('sahil');
return @@identity
refer sql server 2005:is it safe to use @@identity?
for lock on identity issue
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该改用 SCOPE_IDENTITY() 。 但是,@@IDENTITY 指的是当前连接,因此其他用户不会影响您,但还有其他问题需要考虑。
更多信息 这里。
You should be using SCOPE_IDENTITY() instead. However, @@IDENTITY refers to the current connection so other users won't affect you but there are other issues to consider.
More information here.
@@identity 使用起来不安全。 如果表有一个触发器,该触发器插入到不同的表,其标识就是将返回的值。 切勿使用它来获取刚刚插入的 idnetity 值。 您可能认为我现在没有触发器,但您永远不知道什么时候会添加触发器,并且您可能需要很长时间才能意识到您的数据已经彻底混乱。
@@identity is not safe to use. If the table has a trigger with an insert to a differnt table with an identity that is the value that will be returned. Never use it to get the idnetity value you just inserted. You may think well I don't have a trigger now, but you never know when one might be added and you can go a long time before realizing that your data is hopelessly messed up.