SQL обновление top1 строки запроса - PullRequest
30 голосов
/ 05 октября 2010

Запрос ниже работает:

update  top(1) ShipBillInfo 
set     shipfirstname='kkk' 
where   CustomerId='134';

, но он показывает ошибку, если я пытаюсь заказать по некоторому Id: например:

update  top(1) ShipBillInfo 
set     shipfirstname='kkk' 
where   CustomerId='134' 
order by 
        OredrGUID desc;

Ответы [ 3 ]

31 голосов
/ 05 октября 2010
With cte as (
select  top(1) shipfirtsname  
From ShipBillInfo 
where   CustomerId='134' 
order by  OredrGUID desc)
Update cte set shipfirstname='abc';
22 голосов
/ 05 октября 2010

почему вы не делаете:

update ShipBillInfo 
set shipfirstname='kkk' 
where OrderGUID = (select top (1) OrderGUID  
                   from ShipBillInfo 
                   where CustomerId = 134 
                   order by OredrGUID desc )
7 голосов
/ 14 июня 2016

Thread Safe

Для многопоточного решения у меня не сработало ни одно из предложенных решений ( некоторые строки обновлялись более одного раза при его одновременном выполнении ).

Это сработало:

UPDATE Account 
SET    sg_status = 'A'
WHERE  AccountId = 
(
    SELECT TOP 1 AccountId 
    FROM Account WITH (UPDLOCK) --this makes it thread safe
    ORDER  BY CreationDate 
)

Если вы хотите вернуть какой-то столбец обновленного элемента, вы можете указать это в своем заявлении об обновлении: OUTPUT INSERTED.AccountId (между SET и WHERE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...