我的查询
UPDATE TOP (1) TX_Master_PCBA
SET TIMESTAMP2 = '2013-12-12 15:40:31.593'
WHERE SERIAL_NO IN ('0500030309')
ORDER BY TIMESTAMP2 DESC
在TX_Master_PCBA
表中,我有10个记录,但我想将最新的TIMESTAMP2
更新为当前日期时间。
上述查询会出现以下错误:
关键字'TOP'附近的语法不正确。
我的查询
UPDATE TOP (1) TX_Master_PCBA
SET TIMESTAMP2 = '2013-12-12 15:40:31.593'
WHERE SERIAL_NO IN ('0500030309')
ORDER BY TIMESTAMP2 DESC
在TX_Master_PCBA
表中,我有10个记录,但我想将最新的TIMESTAMP2
更新为当前日期时间。
上述查询会出现以下错误:
关键字'TOP'附近的语法不正确。
WITH UpdateList_view AS (
SELECT TOP 1 * from TX_Master_PCBA
WHERE SERIAL_NO IN ('0500030309')
ORDER BY TIMESTAMP2 DESC
)
update UpdateList_view
set TIMESTAMP2 = '2013-12-12 15:40:31.593'
Kapil的被接受的回答存在缺陷,如果存在多个时间戳相同的记录,它将更新多个记录而不是真正的Top 1查询。
;With cte as (
SELECT TOP(1) email_fk FROM abc WHERE id= 177 ORDER BY created DESC
)
UPDATE cte SET email_fk = 10
Ref Remus Rusanu Ans:- SQL更新顶部1行查询
UPDATE TX_Master_PCBA
SET TIMESTAMP2 = '2013-12-12 15:40:31.593',
G_FIELD='0000'
WHERE TIMESTAMP2 IN
(
SELECT TOP 1 TIMESTAMP2
FROM TX_Master_PCBA WHERE SERIAL_NO='0500030309'
ORDER BY TIMESTAMP2 DESC -- You need to decide what column you want to sort on
)
寻找线程安全解决方案的人可以在这里查看。
代码:
UPDATE Account
SET sg_status = 'A'
OUTPUT INSERTED.AccountId --You only need this if you want to return some column of the updated item
WHERE AccountId =
(
SELECT TOP 1 AccountId
FROM Account WITH (UPDLOCK) --this is what makes the query thread safe!
ORDER BY CreationDate
)
AccountId
不唯一时,你需要像 https://dev59.com/5mIj5IYBdhLWcg3wMiUu#32395239 中提到的那样在 CTE 中工作,以仅获取单个记录。 - Gregor y当在INSERT
、UPDATE
、MERGE
或DELETE
语句中使用TOP
关键字时,所引用的行没有任何排序,并且不能在这些语句中直接指定ORDER BY
子句。如果您需要使用TOP
按照有意义的时间顺序插入、删除或修改行,则必须将TOP
与在子查询语句中指定的ORDER BY
子句一起使用。
TOP
不能在分区视图的UPDATE
和DELETE
语句中使用。
TOP
不能与OFFSET
和FETCH
结合在同一个查询表达式(在同一个查询范围内)。有关更多信息,请参见http://technet.microsoft.com/en-us/library/ms189463.aspx
它也可以很好地处理一些复杂的 IT 技术问题。
Update t
Set t.TIMESTAMP2 = '2013-12-12 15:40:31.593'
From
(
Select Top 1 TIMESTAMP2
From TX_Master_PCBA
Where SERIAL_NO IN ('0500030309')
Order By TIMESTAMP2 DESC
) t
UPDATE TX_Master_PCBA SET TIMESTAMP2=NOW() WHERE SERIAL_NO='050030309' ORDER BY TIMESTAMP DESC LIMIT 1
。 - Tomer W