Синтаксическая ошибка при объявлении курсора в T-SQL - PullRequest
0 голосов
/ 03 января 2019

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

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

Не могли бы вы помочь мне выяснить, что мне здесь не хватает? Или это может быть связано с моей версией базы данных: хранилище данных SQL Microsoft Azure - 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 ]

0 голосов
/ 03 января 2019

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

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

0 голосов
/ 03 января 2019

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...