在一个存储过程中选择并读取表的第一条记录,然后删除记录



我想逐个读取记录,并在读取后删除它们。表是一个临时表,多线程程序将使用表的数据。我只需要读取每条记录一次,而不是通过多个线程。 存储过程是否有任何解决方案来创建此线程安全程序(在第一个线程读取后删除记录(?

首先,我觉得我必须警告您,在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

最新更新