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

SQL-запрос top1 row query

Выполняется следующий запрос:

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;
4b9b3361

Ответ 1

With cte as (
select  top(1) shipfirtsname  
From ShipBillInfo 
where   CustomerId='134' 
order by  OredrGUID desc)
Update cte set shipfirstname='abc';

Ответ 2

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

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

Ответ 3

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)