我有以下查询:
UPDATE TOP (@MaxRecords) Messages
SET status = 'P'
OUTPUT inserted.*
FROM Messages
where Status = 'N'
and InsertDate >= GETDATE()
Run Code Online (Sandbox Code Playgroud)
在Messages表中有优先级列,我想首先选择高优先级消息.所以我需要一个ORDER BY.但是我不需要在更新运行之前对输出进行排序,而是对数据进行排序.
据我所知,不可能将ORDER BY添加到UPDATE语句中.还有其他想法吗?
米
Rom*_*kar 37
你可以使用公用表表达式:
;with cte as (
select top (@MaxRecords)
status
from Messages
where Status = 'N' and InsertDate >= getdate()
order by ...
)
update cte set
status = 'P'
output inserted.*
Run Code Online (Sandbox Code Playgroud)
这个使用的事实是,在SQL Server中,可以更新cte,就像可更新视图一样.
Upe*_*ari 15
您可以尝试子查询
UPDATE Messages
SET status = 'P'
WHERE MessageId IN (SELECT TOP (@MaxRecords) MessageId FROM Messages where Status = 'N' and InsertDate >= GETDATE() ORDER BY Priority)
output inserted.*
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29320 次 |
| 最近记录: |