嵌套 SQL 游标打印变量,但不会更新

Nested SQL cursor prints variable, but will not update

我正在使用嵌套游标来更新我数据库中每个 table 的第一列,以填充在线报告程序的数据。

当使用 print 语句测试我的光标时,一切运行良好。当我切换到更新命令时,我收到一条错误消息,指出必须定义变量@table。为什么变量只适用于打印,我怎样才能让它正常工作?

declare @table varchar (30)
declare @Column varchar (30)

DECLARE [TABLE] CURSOR FOR SELECT TABLE_NAME FROM 
postfixing.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' order 
by table_name
OPEN [TABLE]
FETCH FROM [TABLE] INTO @TABLE
WHILE @@FETCH_STATUS=0
    BEGIN
    DECLARE [COLUMN] CURSOR FOR SELECT Top 1 Column_name FROM 
postfixing.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =@table order by 
column_name
    OPEN [COLUMN]
    FETCH FROM [COLUMN] INTO @COLUMN
    WHILE @@FETCH_STATUS=0
        BEGIN
        PRINT @TABLE+'   '+@COLUMN
        --UPDATE @TABLE SET @COLUMN=@COLUMN
        FETCH FROM [COLUMN] INTO @COLUMN
        END
    DEALLOCATE [COLUMN]
    FETCH FROM [TABLE] INTO @TABLE
END
DEALLOCATE [TABLE]

因为你只得到第一行,你可以消除嵌套游标,它应该做你想做的事:

declare @table varchar (30)
declare @Column varchar (30)

DECLARE [TABLE] CURSOR FOR SELECT TABLE_NAME FROM 
postfixing.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' order 
by table_name
OPEN [TABLE]
FETCH FROM [TABLE] INTO @TABLE
WHILE @@FETCH_STATUS=0
    BEGIN

    SET @COLUMN = (SELECT Top 1 Column_name FROM 
postfixing.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =@table order by 
column_name)

    PRINT @TABLE+'   '+@COLUMN
    --UPDATE @TABLE SET @COLUMN=@COLUMN

FETCH FROM [TABLE] INTO @TABLE
END
CLOSE [TABLE]
DEALLOCATE [TABLE]