Как отсортировать набор результатов оператора UPDATE, который использует ВЫХОДНОЙ пункт?

Существует категорический ответ на это от парня, который реализовал их - Chris Brumme. Он записал превосходная статья блога о предмете (предупреждение - ее очень длинное) (warning2 - его очень хорошо записанный, если Вы будете техником, то Вы считаете его до конца и затем иметь для составления часов после работы:))

резюме: они являются медленными. Они реализованы как Win32 исключения SEH, таким образом, некоторые даже передадут кольцо 0 границ ЦП! Очевидно, в реальном мире, Вы будете делать большую другую работу, таким образом, нечетное исключение не будет замечено вообще, но если Вы используете их для процесса выполнения программы кроме Вашего приложения, которое будет коваться. Это - другой пример маркетинговой машины MS, вредящей нам. Я вспоминаю один microsoftie сообщение нам, как они подверглись абсолютно нулю наверху, который является полной чушью.

Chris дает подходящую кавычку:

На самом деле, CLR внутренне использует исключения даже в неуправляемых частях механизма. Однако существует серьезная долгосрочная проблема производительности за исключениями, и это должно быть включено в Ваше решение.

9
задан ThinkingStiff 30 June 2012 в 05:12
поделиться

3 ответа

Я полагаю, ваш единственный вариант - превратить предложение OUTPUT в OUTPUT INTO и сохранить значения во временном (в памяти) таблицу и отсортируйте их там при выборе из временной таблицы.

DECLARE @UpdateOutputTable TABLE 
         (WFItemID INT, Title VARCHAR(255), Teaser VARCHAR(255), ReleaseDate DATETIME)

, а затем измените ваш оператор UPDATE на:

Update dbo.WFItem
Set ApprovedDate = getdate()
Output inserted.WFItemID, inserted.Title, inserted.Teaser, inserted.ReleaseDate
    INTO @UpdateOutputTable 
Where ApprovedDate is null

, а затем выберите из временной таблицы:

SELECT WFItemID, Title, Teaser
FROM @UpdateOutputTable
ORDER BY ReleaseDate

Marc

6
ответ дан 4 December 2019 в 22:29
поделиться

Вы можете вывести результаты в табличную переменную, а затем выбрать результаты из этой таблицы в любом порядке Вот пример с той же страницы MSDN , на которую вы ссылались в своем вопросе, но я добавил Order By в конце

DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25 
OUTPUT INSERTED.EmployeeID,
       DELETED.VacationHours,
       INSERTED.VacationHours,
       INSERTED.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar
Order by EmpID;
1
ответ дан 4 December 2019 в 22:29
поделиться

Насколько мне известно, нет способа отсортировать ВЫВОД. Что касается того, какой объект использовать, это действительно зависит от объемов данных, с которыми вы имеете дело. Вот статья, в которой сравниваются временные таблицы с табличными переменными:

http://blogs.msdn.com/sqlprogrammability/archive/2007/01/18/11-0- Contemporary-tables-table-variables-and-recompiles.aspx

Просто используйте OUTPUT INTO, чтобы поместить результаты во временный объект, а затем загрузите их обратно с помощью предложения ORDER BY.

1
ответ дан 4 December 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: