关闭

批量将一个库里的所有表里的char改成nchar类型

2543人阅读 评论(1) 收藏 举报

/*--将所有的表中,数值类型由char,varchar改为nchar,nvarchar 的存储过程

--邹建 2004.02(引用请保留此信息)--*/  
 
/*--调用示例:  
           exec  p_set  
--*/  
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  
 
create  procedure  p_set  
as  
declare  tb  cursor  for  
SELECT  sql='alter  table  ['+d.name  
           +']  alter  column  ['+a.name+']  n'  
           +b.name+'('+cast(a.length*2  as  varchar)+')'  
FROM  syscolumns  a  
           left  join  systypes  b  on  a.xtype=b.xusertype  
           inner  join  sysobjects  d  on  a.id=d.id    and  d.xtype='U'  and    d.name<>'dtproperties'  
where    
           b.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  =  a.id  AND  colid=a.colid  
                       )))                        --主键不能修改  
order  by  d.name,a.name  
 
declare  @sql  varchar(1000)  
open  tb  
fetch  next  from  tb  into  @sql  
while  @@fetch_status  =  0  
begin  
           exec(@sql)  
           fetch  next  from  tb  into  @sql  
end  
close  tb  
deallocate  tb  
go  

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1279008次
    • 积分:14874
    • 等级:
    • 排名:第816名
    • 原创:178篇
    • 转载:9篇
    • 译文:0篇
    • 评论:881条
    最新评论