日期:2014-05-18  浏览次数:20599 次

游标中怎样更新其他数据表中的字段值?

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 ---------------将游标对象删除