我曾在 SQL Server 数据库上工作。现在我必须处理 Sybase 数据库(使用 Squirrel 客户端)。此查询不起作用:

DECLARE @tableName VARCHAR(500);
DECLARE my_cursor CURSOR FOR

SELECT name
FROM   sysobjects
WHERE  type = 'U';
OPEN my_cursor;
FETCH NEXT FROM my_cursor INTO @tableName;
WHILE @@FETCH_STATUS = 0
    BEGIN
        //Do something here
        FETCH NEXT FROM my_cursor;
    END
CLOSE my_cursor;
DEALLOCATE CURSOR my_cursor;

它给出了一个错误 - Incorrect syntax near the keyword 'FROM'.SQLState: ZZZZZErrorCode: 156Error occured in:FETCH NEXT FROM my_cursor INTO @table_Name
现在这在 SQL Server 数据库中工作正常(在我将最后一行更改为 DEALLOCATE my_cursor 之后)。谁能告诉我我哪里出错了?

最佳答案

正如 Mitch 指出的那样,获取语法是:

fetch cursor_name [into fetch_target_list]

您还需要在单独的批处理中声明游标,这意味着您必须在声明语句之后放置一个“GO”。然后您会发现您的变量超出了范围,因此您需要将其移动到“GO”之后。

您还需要检查 @@sqlstatus 以查看获取的成功程度,而不是 @@FETCH_STATUS 我认为它只是 MSSQL。
DECLARE my_cursor CURSOR FOR
  SELECT name
  FROM   sysobjects
  WHERE  type = 'U'
go

DECLARE @tableName VARCHAR(500)
set nocount on
OPEN my_cursor
FETCH my_cursor INTO @tableName

WHILE @@sqlstatus = 0
  BEGIN
      --Do something here

      FETCH my_cursor INTO @tableName
      print @tablename
  END

CLOSE my_cursor
DEALLOCATE CURSOR my_cursor

并且在 Sybase ASE 的行尾不需要分号。

关于sybase - 我可以在 Sybase 中使用 MS SQL 语法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5138853/

10-11 23:32