2

我在尝试运行以下代码以声明一个游标时遇到语法错误,该游标贯穿并打印我的OrderTable.

第 3 行第 11 列的解析错误:“OrderCursor”附近的语法不正确。

你能帮我弄清楚我在这里错过了什么吗?或者这可能与我的数据库版本有关,即:Microsoft Azure SQL 数据仓库 - 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
4

2 回答 2

3

Azure SQL 数据仓库不支持游标。有关如何用循环替换它们的提示,请参见此处。希望是多余的,但只是引用链接中第一个有意义的段落:

但是,在深入研究之前,您应该问自己以下问题:“可以重写此光标以使用基于集合的操作吗?” 在许多情况下,答案是肯定的,而且通常是最好的方法。基于集合的操作通常比迭代的逐行方法执行得更快。

于 2019-01-03T14:07:17.877 回答
0

Microsoft Azure SQL 数据仓库不支持游标。它在文档的顶部这么说:

DECLARE CURSOR (Transact-SQL)
适用于:V SQL Server(从 2008 年开始)V Azure SQL 数据库X Azure SQL 数据仓库X并行数据仓库

话虽如此,在 SQL 中,游标通常是您要避免的。
事实上,经过大约 20 年的软件开发,我可以用一只手数出我使用光标的次数,用三根手指数出它是合理的次数。

如果您可以创建一个问题来显示您正在处理的实际问题(我猜它实际上并不是在尝试打印),我相信这里的某个人将能够帮助您获得基于集合的解决方案,而不是使用光标。

于 2019-01-03T14:07:10.510 回答