【发布时间】:2012-02-23 09:10:44
【问题描述】:
我有一个表格,其中数据不断快速添加。
我需要从此表中获取记录并立即删除它们,这样我就无法第二次处理相同的记录。而且由于数据以更快的速度添加,我需要使用TOP clause,因此当时只有少量记录进入业务逻辑进行处理。
我正在使用以下查询来
BEGIN TRAN readrowdata
SELECT
top 5 [RawDataId],
[RawData]
FROM
[TABLE] with(HOLDLOCK)
WITH q AS
(
SELECT
top 5 [RawDataId],
[RawData]
FROM
[TABLE] with(HOLDLOCK)
)
DELETE from q
COMMIT TRANSACTION readrowdata
我在这里使用 HOLDLOCK,所以当我执行 SELECT 和 DELETE 操作时,新数据无法插入到表中。我使用它是因为假设现在表中只有 3 条记录,那么 SELECT 语句将获得 3 条记录,同时插入新记录,DELETE 语句将删除 4 条记录。所以我会在这里丢失 1 个数据。
查询在性能方面是否正常?如果我可以改进它,请提供您的建议。
谢谢
【问题讨论】:
-
我会敦促您阅读SQL Server, using a table as a queue 以及那里的链接
标签: sql-server sql-server-2008 sql-server-2005