批量将数据库字段varchar类型转换成nvarchar类型

by 清泉 26. 三月 2009 15:08
使用存储过程批量将varchar转换成nvarchar,注意只能执行一次。
if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_set]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_set]  
  GO  
   
  /*--char,varchar字段转换成nchar,nvarchar  
   
  将所有的用户表中,数值类型由char,varchar改为nchar,nvarchar  
  要注意的是,如果字段上有约束,则修改会出错   
    
  --邹建   2004.01(引用请保留此信息)--*/   
    
  /*--调用示例:  
   
  exec   p_set  
  --*/  
  create   procedure   p_set  
  @flag   bit=0     --转换标志:  
                            --0   转换时使用原来的定义长度,如果原来定义长度超过4000,则定义为4000  
                            --1   转换时使用原来的定义长度/2  
  as  
  declare   tb   cursor   local   for  
  SELECT   N'alter   table   ['  
  +replace(o.name,N']',N']]')  
  +N']   alter   column   ['  
  +replace(c.name,N']',N']]')  
  +N']   N'  
  +replace(t.name,N']',N']]')  
  +N'('  
  +case    
  when   @flag=0  
  then   case   when   c.prec>4000   then   '4000'   else   rtrim(c.prec)   end  
  else   rtrim(c.prec/2)  
  end+N')'  
  FROM   syscolumns   c,systypes   t,sysobjects   o  
  where   o.id=c.id  
  and   c.xusertype=t.xusertype  
  and   objectproperty(o.id,'IsUserTable')=1  
  and   o.status>=0  
  and   t.name   in('char','varchar')   --要处理的数据类型  
  and   not   exists(  
  SELECT   1   FROM   sysobjects    
  where   xtype='PK'    
  and   name   in   (  
  SELECT   name   FROM   sysindexes    
  WHERE   indid   in(  
  SELECT   indid   FROM   sysindexkeys    
  WHERE   id   =   c.id   AND   colid=c.colid)))     --主键不能修改  
  order   by   o.id,c.colid  
   
  declare   @s   nvarchar(4000)  
  open   tb  
  fetch   tb   into   @s  
  while   @@fetch_status   =   0  
  begin  
  exec(@s)  
  fetch   tb   into   @s  
  end  
  close   tb  
  deallocate   tb  
  go  

Tags:

数据库相关

添加评论



(将显示你的Gravatar头像)  

biuquote
微笑得意调皮害羞酷大笑惊讶发呆喜欢可怜尴尬闭嘴噘嘴皱眉伤心抓狂呕吐坏笑漫骂发怒
Loading



Supidea.com 晨飞的梦 @ All Rights Reserved. Powered by BlogYi.NET ver:1.8.0.0. 苏ICP备09011404号

关于博主

kamau
抱着美好的理想背井离乡,这酸甜苦辣只能默默忍受。既然选择了路,就得风雨兼程……

Calendar

<<  五月 2012  >>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

在日历中查看文章

最近的评论

Comment RSS

声明

      本博所发一切破解相关附件只作学习研究交流之用,严禁用于商业用途,请在下载24小时内删除。
      本博所有网友评论不代表本博立场,版权归其作者所有。

© Copyright 2009