游标中怎样更新其他数据表中的字段值?
DECLARE upname CURSOR --声明游标
FOR SELECT name FROM sysobjects WHERE name like 'Check_Form2% ' -------------游标的数据来源
OPEN upname --打开游标
DECLARE @table varchar(50),
@Object_Name varchar(50),
@StrSql varchar(500),
@Object_Code varchar(50)
set @Object_Name = 'aa '
set @Object_Code = 'rchd001 '
FETCH NEXT FROM upname INTO @table
WHILE(@@FETCH_STATUS=0) --判断是否读到数据,0表示读到数据
BEGIN
set @StrSql = 'update '+ @table + ' set Object_Name = '+ @Object_Name + ' where Object_Code = '+ @Object_Code
exec (@StrSql)
FETCH NEXT FROM upname INTO @table
END
CLOSE upname ----------------关闭游标与数据的关联
DEALLOCATE upname ---------------将游标对象删除
以上运行后,提示以下错误:
服务器: 消息 207,级别 16,状态 3,行 1
列名 'aa ' 无效。
服务器: 消息 207,级别 16,状态 1,行 1
列名 'rchd001 ' 无效。
[解决办法]
把当中那句 换成这样
set @StrSql = 'update '+ @table + ' set Object_Name = ' ' '+ @Object_Name + ' ' ' where Object_Code = ' ' '+ @Object_Code+ ' ' ' '
记得如果是赋值 两边要加引号,不加引号 ,会认为是列名
[解决办法]
DECLARE upname CURSOR --声明游标
FOR SELECT name FROM sysobjects WHERE name like 'b% ' -------------游标的数据来源
OPEN upname --打开游标
DECLARE @table varchar(50),
@Object_Name varchar(50),
@StrSql varchar(500),
@Object_Code varchar(50)
set @Object_Name = 'aa '
set @Object_Code = 'rchd001 '
FETCH NEXT FROM upname INTO @table
WHILE(@@FETCH_STATUS=0) --判断是否读到数据,0表示读到数据
BEGIN
set @StrSql = 'update '+ @table + ' set Object_Name = ' ' '+ @Object_Name + ' ' ' where Object_Code = ' ' '+ @Object_Code+ ' ' ' '
exec (@StrSql)
FETCH NEXT FROM upname INTO @table
END
CLOSE upname ----------------关闭游标与数据的关联
DEALLOCATE upname ---------------将游标对象删除