Синтаксическая ошибка при объявлении курсора в T-SQL

Я получаю синтаксическую ошибку при попытке запустить приведенный ниже код, чтобы объявить курсор, который проходит через, и распечатать первые 10 ордеров в моем OrderTable,

Ошибка разбора в строке: 3, столбец: 11: неверный синтаксис рядом с OrderCursor.

Не могли бы вы помочь мне выяснить, что мне здесь не хватает? Или это может быть связано с моей версией базы данных: Microsoft Azure SQL Data Warehouse - 10.0.9999.0 n?

Спасибо за вашу помощь

DECLARE @Order VARCHAR(11) 
DECLARE @Variant INT

DECLARE OrderCursor CURSOR FOR 
     SELECT TOP 10 ORDER_ID, Variant 
     FROM OrderTable

OPEN OrderCursor

FETCH NEXT FROM OrderCursor INTO @Order, @Variant

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'Order no:' + @Order + @Variant

    FETCH NEXT FROM OrderCursor INTO @Order, @Variant
END

CLOSE OrderCursor
DEALLOCATE OrderCursor

2 ответа

Хранилище данных SQL Azure не поддерживает курсоры. Смотрите здесь советы о том, как заменить их на петли. Надеюсь, излишним, но просто процитировать первый значимый абзац из ссылки:

Однако, прежде чем погрузиться в голову, вы должны задать себе следующий вопрос: "Может ли этот курсор быть переписан для использования операций на основе множества?". Во многих случаях ответ - да, и часто это лучший подход. Операция на основе множества часто выполняется быстрее, чем итеративный, построчный подход.

Хранилище данных Microsoft Azure SQL не поддерживает курсоры. Так сказано прямо в верхней части документации:

ОБЪЯВИТЬ КУРСОР (Transact-SQL)
ПРИМЕНИМО к: V SQL Server (начиная с 2008 г.) V База данных SQL Azure X Хранилище данных SQL Azure X Параллельное хранилище данных

Тем не менее, курсор в любом случае обычно является чем-то, чего вы хотите избежать в SQL.
Фактически, после 20 лет разработки программного обеспечения я, вероятно, могу рассчитывать, с одной стороны, сколько раз я использовал курсоры, а на трех пальцах - сколько раз это было оправдано.

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

Другие вопросы по тегам