На этот вопрос уже есть ответ:
Мой запрос
UPDATE TOP (1) TX_Master_PCBA
SET TIMESTAMP2 = '2013-12-12 15:40:31.593'
WHERE SERIAL_NO IN ('0500030309')
ORDER BY TIMESTAMP2 DESC
со столбцом serial_No
в таблице TX_Master_PCBA
У меня есть 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
)
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'
Exception calling "ReadKey" with "1" argument(s): "The method or operation is not implemented." At C:\file.ps1:26 char:5 + $null = $Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : NotImplementedException
– gakera
02.05.2020, 00:49
Принятый ответ Kapil ошибочен, он обновит более одной записи, если доступно 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
Ref Remus Rusanu Ans: - SQL-запрос top1 строки запроса
Для тех, кто ищет поточно-ориентированное решение, посмотрите здесь .
Код:
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
)
Когда TOP
используется с INSERT
, UPDATE
, MERGE
или DELETE
, ссылочные строки не располагаются ни в каком порядке, и предложение ORDER BY не может быть непосредственно указано в этих операторах. Если вам нужно использовать TOP для вставки, удаления или изменения строк в значимом хронологическом порядке, вы должны использовать TOP
вместе с предложением ORDER BY
, которое указано в операторе subselect.
TOP
нельзя использовать в выражениях UPDATE
и DELETE
для разделенных представлений.
TOP
нельзя объединить с OFFSET
и FETCH
в одном и том же выражении запроса (в одной и той же области запроса). Для получения дополнительной информации см. http://technet.microsoft.com/en-us/library/ms189463.aspx
Это также хорошо работает ...
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