Подтвердить что ты не робот

Обновление Топ 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".

4b9b3361

Ответ 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 
)