微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – SQL Server是否保证顺序插入一个标识列?

换句话说,以下“光标”方法是否有效:

>从DB检索行
>从返回的记录中保存最大的ID以供以后使用.在LastMax
>以后,“SELECT * FROM MyTable WHERE Id> {0}”,LastMax

为了使它工作,我必须确保我在第1步中没有得到的每一行的Id都大于LastMax.这是有保证的,还是可以跑到奇怪的竞争条件?

解决方法

保证绝对在任何情况下都不会得到可能小于或等于当前最大值的值?不,没有这样的保证.也就是说,这种情况可能发生的情况有限:

>某人禁用身份插入并插入一个值.
有人重新签名身份列.
>有人改变增量值的符号(即1而不是1)

假设没有一个这样的情况,你可以从竞争条件中得到安全保护,创造下一个值低于现有值的情况.也就是说,不能保证这些行将按照其身份值的顺序进行.例如:

>打开一个事务,插入你的表中一个标识列.让我们说它的价值42.
>插入并提交到同一个表中的另一个值.让我们说值43.

直到第一笔交易发生,43存在,但42不存在.身份列只是保留一个值,它不是规定提交的顺序.

原文地址:https://www.jb51.cc/mssql/75308.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐