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
表serial_No
专栏中,我有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
表serial_No
专栏中,我有10条记录,但我想更新最新TIMESTAMP2
当前日期时间。
上述查询抛出错误:关键字 'TOP' 近
不正确的语法。
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
)
当TOP
使用具有INSERT
,UPDATE
,MERGE
,或DELETE
,所引用的行不设置在任何顺序和ORDER BY子句不能在这些语句直接指定。如果您需要使用TOP以有意义的时间顺序插入,删除或修改行,则必须使用TOP
以及在subselect语句中指定的ORDER BY
子句。
TOP
不能用于分区视图上的UPDATE
和DELETE
语句。 (在同一个查询范围内)不能与OFFSET
和FETCH
组合使用。欲了解更多信息,请参阅http://technet.microsoft.com/en-us/library/ms189463.aspx
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'
接受卡皮的答案是有缺陷的,如果有2个或可用相同的时间戳多个记录,将更新多条记录,而不是一个真正的顶部1查询。
;With cte as (
SELECT TOP(1) email_fk FROM abc WHERE id= 177 ORDER BY created DESC
)
UPDATE cte SET email_fk = 10
参考莱姆斯Rusanu答: - SQL update top1 row query
如果我想在此处使用Join并从该表中设置值, –
对于那些谁正在寻找一个线程安全的解决方案来看看here。
代码:
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
)
这也是行之有效的...
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
[?SQL UPDATE TOP与ORDER BY(的
可能重复http://stackoverflow.com/questions/19584315/sql-update-top-with-order-by) – GolfWolf
尽管问题陈述了SQL-SERVER,对于搜索MySql解决方案的用户来说,有一种更简单快捷的方法:UPDATE TX_Master_PCBA SET TIMESTAMP2 = NOW()WHERE SERIAL_NO ='050030309'ORDER BY TIMESTAMP DESC LIMIT 1' –
[SQL update top1 row query](http:// stackov erlang.com/questions/3860975/sql-update-top1-row-query) – fabriciorissetto