我想逐个读取记录,并在读取后删除它们。表是一个临时表,多线程程序将使用表的数据。我只需要读取每条记录一次,而不是通过多个线程。 存储过程是否有任何解决方案来创建此线程安全程序(在第一个线程读取后删除记录(?
首先,我觉得我必须警告您,在SQL Server中执行此操作可能不是最好的主意 - 关系数据库最好使用基于集合的方法,而不是逐行工作。
单独读取和删除每一行的性能会很差。
话虽如此,这里有一种方法可以删除一行,使用output
子句将其返回给客户端,并且(感谢rowlock
提示(以线程安全的方式执行此操作:
DELETE TOP(1)
FROM #tempTable WITH (ROWLOCK)
OUTPUT deleted.*
ORDER BY id
这应该是您的存储过程代码:
Create Procedure DeleteButOne
As
Begin
Select TOP 1 * From "Your Table Name"
DELETE FROM "Your Table Name" WHERE Id NOT IN (SELECT TOP 1 ID FROM "Your Table
Name")
End
然后你可以执行过程:
Execute DeleteButOne