如何在单个 sql 查询中选择和更新选定的行?

ami*_*min 1 sql t-sql transactions petapoco

我有一张名为 Car

Table car ( id int NOT NULL, plate int NOT NULL, sent_to_server bit NOT NULL ); 
Run Code Online (Sandbox Code Playgroud)

我想选择所有尚未发送到服务器的汽车

SELECT * 
FROM   car 
WHERE  sent_to_server = 0; 
Run Code Online (Sandbox Code Playgroud)

然后我应该更新我的数据库

UPDATE car 
SET    sent_to_server = 1 
WHERE  sent_to_server = 0; 
Run Code Online (Sandbox Code Playgroud)

我有多个线程所以这行不通(多个线程同时读取和写入数据库-(我使用 sql server))

如何在一个查询中执行 2 个查询?或者有更好的解决方案!?

注意:我将 C# 与 petapoco 库一起使用(如果重要的话!)

Ton*_*ony 5

只要您使用的是 SQL Server 2005 或更高版本,您就可以OUTPUT在单个查询中使用。

UPDATE Car
SET    sent_to_server = 1 
OUTPUT Inserted.id, Inserted.plate
WHERE  sent_to_server = 0;
Run Code Online (Sandbox Code Playgroud)

这将更新sent_to_server为零的行并返回修改后的行。不需要交易。

SQL小提琴