读书人

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

发布时间: 2012-03-09 16:54:58 作者: rapoo

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

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


读书人网 >SQL Server

热点推荐