理想情况下我想这样做:
UPDATE TOP (10) messages SET status=10 WHERE status=0 ORDER BY priority DESC;
Run Code Online (Sandbox Code Playgroud)
英文:我想从数据库中获取前10个可用(状态= 0)消息并锁定它们(状态= 10).应首先获得具有更高优先级的消息.
遗憾的是,MS SQL不允许更新中的order by子句.
无论如何如何规避这个?
我的查询
UPDATE TOP (1) TX_Master_PCBA
SET TIMESTAMP2 = '2013-12-12 15:40:31.593'
WHERE SERIAL_NO IN ('0500030309')
ORDER BY TIMESTAMP2 DESC
Run Code Online (Sandbox Code Playgroud)
使用表中的serial_No列TX_Master_PCBA我有10条记录,但我想更新最新TIMESTAMP2的当前日期时间.
上面的查询抛出错误:
关键字"TOP"附近的语法不正确.
我有以下查询:
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语句中.还有其他想法吗?
米
我在SQL Server中有一个表,其中有一个PK(ID)和另一个(逻辑)主键由其他几列(尽管没有UNIQUE约束).比方说,表PERSON,PK = PERSON_ID,然后NAME,SURNAME,AGE
我想有可能说
UPDATE PERSON SET AGE = 43 WHERE NAME = 'XX' AND SURNAME = 'YYY'
Run Code Online (Sandbox Code Playgroud)
并且只有在'updated rows'= 1时执行它,否则(超过1行)执行完全没有执行.问题是我不确定NAME和SURNAME是否唯一地标识了一条记录,我无法先验地说出来.
想法?