Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование ORDER BY в UPDATE  [new]
Pabl0
Member

Откуда:
Сообщений: 265
Подскажите как использовать ORDER BY в UPDATE, видел пару вариантов в роли таких конструкций:

With cte As
(
SELECT id,Number,
ROW_NUMBER() OVER (ORDER BY id DESC) AS RN
FROM Test
)
UPDATE cte SET Number=RN


но может можно как то проще?

Мой пример:


		UPDATE TOP (1) dbo._pc_TariffValue
		SET validTill = GETDATE()
        OUTPUT Deleted.Id INTO @tariffValueIds
		WHERE planId   = @TariffPlanId 
		ORDER BY validFrom DESC
23 апр 18, 11:53    [21360130]     Ответить | Цитировать Сообщить модератору
 Re: Использование ORDER BY в UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
Pabl0
Подскажите как использовать ORDER BY в UPDATE, видел пару вариантов в роли таких конструкций:

With cte As
(
SELECT id,Number,
ROW_NUMBER() OVER (ORDER BY id DESC) AS RN
FROM Test
)
UPDATE cte SET Number=RN



но может можно как то проще?

Мой пример:


		UPDATE TOP (1) dbo._pc_TariffValue
		SET validTill = GETDATE()
        OUTPUT Deleted.Id INTO @tariffValueIds
		WHERE planId   = @TariffPlanId 
		ORDER BY validFrom DESC
В UPDATE ORDER BY не играет никакой роли, за исключением использования функции IDENTITY().
В первом показанном примере ORDER BY относитсчя не к UPDATE, а к ROW_NUMBER().
23 апр 18, 12:11    [21360210]     Ответить | Цитировать Сообщить модератору
 Re: Использование ORDER BY в UPDATE  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
автор
Мой пример:


UPDATE TOP (1) dbo._pc_TariffValue
SET validTill = GETDATE()
OUTPUT Deleted.Id INTO @tariffValueIds
WHERE planId = @TariffPlanId
ORDER BY validFrom DESC

пример чего? как сдулать непонятно, что дажже не компилируемое?

ну и
автор
The rows referenced in the TOP expression used with INSERT, UPDATE, or DELETE are not arranged in any order.
23 апр 18, 12:20    [21360255]     Ответить | Цитировать Сообщить модератору
 Re: Использование ORDER BY в UPDATE  [new]
Eleanor
Member

Откуда:
Сообщений: 2884
Pabl0,

Посмотрите в документации пример использования UPDATE с ORDER BY и TOP:
UPDATE HumanResources.Employee  
SET VacationHours = VacationHours + 8  
FROM (SELECT TOP 10 BusinessEntityID FROM HumanResources.Employee  
     ORDER BY HireDate ASC) AS th  
WHERE HumanResources.Employee.BusinessEntityID = th.BusinessEntityID;

Но это не проще. Такого синтаксиса, как у вас, не существует.
23 апр 18, 13:17    [21360512]     Ответить | Цитировать Сообщить модератору
 Re: Использование ORDER BY в UPDATE  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
iap
за исключением использования функции IDENTITY().
Чушь написал.
Функция IDENTITY() используется только в SELECT ... INTO.
К UPDATE не имеет никакого отношения.
23 апр 18, 13:48    [21360727]     Ответить | Цитировать Сообщить модератору
 Re: Использование ORDER BY в UPDATE  [new]
Eleanor
Member

Откуда:
Сообщений: 2884
Pabl0
видел пару вариантов в роли таких конструкций:

Подозреваю, в своих примерах с cte вы имели в виду одну из этих двух конструкций:
WITH cte AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY id DESC) AS RN
FROM Test
)
UPDATE cte SET Number = <какое-то значение>
WHERE RN <= 10

WITH cte AS
(
SELECT TOP (10) *
FROM Test
ORDER BY id DESC
)
UPDATE cte SET Number = <какое-то значение>
23 апр 18, 15:43    [21361535]     Ответить | Цитировать Сообщить модератору
 Re: Использование ORDER BY в UPDATE  [new]
шК0ДЕР
Member

Откуда: Издалека долго
Сообщений: 1205
Господа, возможно, задам глупый вопрос, но зачем в UPDATE использовать ORDER BY кляузу?
Разве важен порядок, при котором будут данные обновлены единым запросом?
Или прикручивать тяжелый (в некоторых случаях) оператор - новомодный тренд, чтобы заказчик видел работу программы? (грузит долго - значит работает!)
23 апр 18, 16:06    [21361656]     Ответить | Цитировать Сообщить модератору
 Re: Использование ORDER BY в UPDATE  [new]
шК0ДЕР
Member

Откуда: Издалека долго
Сообщений: 1205
понедельник - день тяжелый. Не сразу понял чего автор хочет) Дошло
23 апр 18, 16:10    [21361675]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить