3

可能重复:
获取插入行标识的最佳方法?

假设我第一次使用 SQL Server 2012 构建拍卖数据库。

有人创建了一个拍卖列表,它被插入到数据库中,并被赋予了一个新的唯一 AuctionID。随着拍卖的插入,还有许多其他数据需要存储并与拍卖相关联,例如图像、产品属性等。

有一个包含基本拍卖数据的表,然后是其他表来存储允许与拍卖的多对多关系的所有其他信息。

现在,在保存有关拍卖数据的其他表中,至少有一列包含 AuctionID,另一列包含一些其他信息,例如产品规格。

我实现这一点的方法(到目前为止)是首先插入基本的拍卖列表,然后让数据库给它一个新的 AuctionID。极好的。接下来我这样做:

SELECT TOP 1 AuctionID FROM Auction
ORDER BY Timestamp DESC

这应该返回最后插入的 AuctionID,如果在插入后立即运行应该是正确的。

然后,我获取此 AuctionID,并在将附加信息片段插入另一个表时使用该值,从而创建多对多关系。中提琴!

但是,当同时发生数百万个事务时,这是正确的方法吗?所以理论上插入可能发生在彼此相隔几毫秒的时间内。在插入发生和我检索最后插入的 AuctionID 之间,我可能会得到错误的 AuctionID。

任何人都可以原谅我的新手帖子并建议最好的方法吗?我面前有很多 SQL 书籍,但找不到与此相关的任何内容。

4

1 回答 1

2

假设这个问题没有结束,SQL Server 2012 为 SQL Server 引入了一个新的功能,称为序列号。它们类似于将列定义为标识,但它们只是一个全局数字分配器——只与它们自己相关联。

与身份属性相比,序列号可以提供更好的性能,因为使用它们所需的元数据操作更少,并且能够设置显式缓存而不是 IDENTITY 的硬编码 10。参考

于 2012-12-26T22:54:13.227 回答