我正在使用嵌套游标更新数据库每个表的第一列,以填充在线报告程序的数据。
使用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]
答案 0 :(得分:1)
好吧,因为你只获得第一行,你可以消除嵌套游标,它应该做你想要的:
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]