Я часто пишу циклы T-SQL, которые выглядят так в сценариях обновления:
While Exists (Select * From #MyTable)
Begin
Declare @ID int, @Word nvarchar(max)
Select Top 1 @ID=ID, @Word=[Word] From #MyTable
-- Do something --
Delete #MyTable Where ID=@ID
End
Работает, но я заметил новую функцию Delete Top, которая была бы полезна, когда #MyTable это просто список строк В этом случае, будет ли это работать:
While Exists (Select * From #MyTable)
Begin
Declare @Word nvarchar(max)
Select Top 1 @Word=[Word] From #MyTable
-- Do something --
Delete Top(1) #MyTable
End
Ну да, это работает в моем тестовом скрипте, но безопасно ли это? Выберет Top 1 и Delete Top (1) всегда ссылаются на одну и ту же запись, или Top немного более расплывчат.
Спасибо, Роб.