SQL 服务器中游标的变量范围?

Variable Scope for Cursors in SQL Server?

当我 运行 以下简单代码时,出现以下错误:"Must declare the table variable "@tableName"."

我不确定为什么:我尝试在 WHILE 语句中声明变量,但我仍然遇到同样的愚蠢错误。 我需要做的就是查询我的数据库 (myDB) 中的所有表并输出它。

DECLARE @tableName VARCHAR(80)
DECLARE TableName_Cursor CURSOR FAST_FORWARD FOR
    SELECT TABLE_NAME FROM myDB.INFORMATION_SCHEMA.Tables 

OPEN TableName_Cursor

FETCH NEXT FROM TableName_Cursor INTO @tableName

WHILE @@FETCH_STATUS =0
BEGIN
--DECLARE @tableName VARCHAR(80)
--USE myDB
    SELECT * FROM @tableName
    FETCH NEXT FROM TableName_Cursor INTO @tableName
END
CLOSE TableName_Cursor
DEALLOCATE TableName_Cursor

非常感谢您的帮助!

此处与 variable 范围无关

您需要 Dynamic SQL 才能执行此操作

Declare @sql varchar(8000)= ''
WHILE @@FETCH_STATUS =0
BEGIN
    Set @sql = ''     
    Set @sql = 'SELECT * FROM ' +QUOTENAME(@tableName)
    EXEC(@sql)
    FETCH NEXT FROM TableName_Cursor INTO @tableName
END