Обновление Топ 1 запись в сервере таблицы sql
Мой запрос
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".
Ответы
Ответ 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
)
Ответ 2
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'
Ответ 3
Принятый ответ 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-запрос top1 row query
Ответ 4
Когда TOP
используется с INSERT
, UPDATE
, MERGE
или DELETE
, ссылочные строки не упорядочены в любом порядке, и предложение ORDER BY не может быть непосредственно указано в этих инструкциях. Если вам нужно использовать TOP для вставки, удаления или изменения строк в значимом хронологическом порядке, вы должны использовать TOP
вместе с предложением ORDER BY
, которое указано в инструкции подзапроса.
TOP
не может использоваться в операторах UPDATE
и DELETE
для секционированных представлений.
TOP
не может быть объединен с OFFSET
и FETCH
в том же выражении запроса (в той же области запроса). Для получения дополнительной информации см. http://technet.microsoft.com/en-us/library/ms189463.aspx
Ответ 5
Он также хорошо работает...
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
Ответ 6
Для тех, кто ищет решение, защищенное потоком, посмотрите здесь.
код:
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
)