我曾经在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;
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误 - Incorrect syntax near the keyword 'FROM'.
SQLState: ZZZZZ
ErrorCode: 156
Error occured in:
FETCH NEXT FROM my_cursor INTO @table_Name现在这在SQL Server数据库中工作正常(在我将最后一行更改为之后DEALLOCATE my_cursor.有人可以告诉我哪里出错了吗?
正如Mitch所指出的,fetch语法是:
fetch cursor_name [into fetch_target_list]
Run Code Online (Sandbox Code Playgroud)
您还需要在单独的批处理中声明游标,这意味着您必须在declare语句之后放置一个"GO".然后,您将发现您的变量超出范围,因此您需要将其移动到"GO"之后.
您还需要检查@@ sqlstatus以查看fetch的成功程度,而不是@@ 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
Run Code Online (Sandbox Code Playgroud)
并且Sybase ASE中的行末尾不需要分号.