------游标   
declare
@name   varchar(10),           ----表名   
@bm_name   varchar(10),     ----更新值   
@bm1   varchar(10),             ----字段   
@sql   nvarchar(4000)             ----语句   
set   @bm_name='kkk'                           ----更新值   
set   @bm1='bm_name'                           ----字段   declare   kk   cursor     for     
select   
+ quotename(user_name(uid))
-- + quotename(schema_name(uid))   -- 如果你的版本是sql 2005, 则把上面那句注释掉, 用这句代替
+ '.' + quotename(name)
from   sysobjects   
where   id   in   (select   id   from   syscolumns   where   name=@bm1)   
and   objectproperty(id, 'isusertable')=1
open   kk   
fetch   next   from   kk   into   @name     
while   @@fetch_status=0   
  begin   
      set   @sql='update   '+   @name   +'   set   '+@bm1+'=@bm_name  where   bm_no=''01'''----更新语句+条件   
    exec sp_executesql @sql, N'@bm_name   varchar(10)', @bm_name
  fetch   next   from   kk   into   @name   
  end   
close   kk   
deallocate   kk

解决方案 »

  1.   

    谢谢zjcxc(邹建) 大哥,我试了你的代码,出现了如下错误,初学,大哥见笑了------游标   
    declare
    @name   varchar(20),           ----表名   
    @bm_name   varchar(20),     ----更新值   
    @bm1   varchar(20),             ----字段   
    @sql   nvarchar(4000)             ----语句   
    set   @bm_name='old'                           ----更新值   
    set   @bm1='cPsn_Num'                           ----字段   declare   kk   cursor     for     
    select   
    + quotename(user_name(uid))
    -- + quotename(schema_name(uid))   -- 如果你的版本是sql 2005, 则把上面那句注释掉, 用这句代替
    + '.' + quotename(name)
    from   sysobjects   
    where   id   in   (select   id   from   syscolumns   where   name=@bm1)   
    and   objectproperty(id, 'isusertable')=1
    open   kk   
    fetch   next   from   kk   into   @name     
    while   @@fetch_status=0   
      begin   
          set   @sql='update   '+   @name   +'   set   '+@bm1+'=@bm_name  where   cPsn_Num=''new'''----更新语句+条件   
        exec sp_executesql @sql, N'@bm_name   varchar(10)', @bm_name
      fetch   next   from   kk   into   @name   
      end   
    close   kk   
    deallocate   kk错误:
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'HR_WA_FieldSh   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'HR_WA_FieldSh   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。(所影响的行数为 0 行)服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_hi_jobInfo   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_hi_jobInfo   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_wa_pay_tem   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_wa_pay_tem   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_hi_langSki   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_hi_langSki   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_wa_paychan   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_wa_paychan   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_hi_partjob   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_hi_partjob   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。(所影响的行数为 0 行)
    (所影响的行数为 0 行)服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_hi_paychan   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_hi_paychan   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。(所影响的行数为 0 行)
    (所影响的行数为 0 行)服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_wm_docu_wm   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_hi_person_   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_hi_person_   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。
    服务器: 消息 105,级别 15,状态 1,行 1
    字符串 'hr_hi_probati   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 之前有未闭合的引号。
    服务器: 消息 170,级别 15,状态 1,行 1
    第 1 行: 'hr_hi_probati   set   cPsn_Num=@bm_name  where   cPsn_Num='new'' 附近有语法错误。(所影响的行数为 0 行)
      

  2.   

    ------游标   
    DECLARE
    @name    sysname,           --表名   
    @bm_name varchar(2000),     --更新值   
    @bm1     sysname,           --字段   
    @sql   nvarchar(4000)       --语句
    SELECT
    @bm_name='old',      --更新值   
    @bm1='cPsn_Num'      --字段   DECLARE tb CURSOR FOR
    SELECT
    + QUOTENAME(USER_NAME(uid))
    -- + QUOTENAME(SCHEMA_NAME(uid))   -- 如果你的版本是sql 2005, 则把上面那句注释掉, 用这句代替
    + '.' + QUOTENAME(name)
    FROM sysobjects   
    WHERE id IN (SELECT id FROM syscolumns WHERE name=@bm1)
    AND OBJECTPROPERTY(id, 'IsUserTable')=1
    OPEN tb
    FETCH NEXT FROM tb INTO @name
    WHILE @@FETCH_STATUS=0
    BEGIN
    SET @sql='UPDATE '+ @name +' SET '+@bm1+' = @bm_name WHERE cPsn_Num=''new'''----更新语句+条件
    EXEC sp_executesql @sql, N'@bm_name varchar(2000)', @bm_name FETCH NEXT FROM tb INTO @name
    END
    CLOSE tb
    DEALLOCATE tb
      

  3.   

    谢谢zjcxc(邹建)大哥,今天太晚了,明天俺再测试下
      

  4.   

    估计你的存储过程并没有alter
      

  5.   

    zjcxc(邹建)大哥真乃高人, zjcxc(邹建)大哥接分,同时谢谢rea1gz(冒牌realgz V0.3)、Tigersong(宋) 的关注!