批量修改字段的类型(SQL Server)--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       
    
  --
*/
   
    
  
/**/ /*--调用示例:   
  exec   p_set   
  --
*/
   
  
-- 修改的存储过程   
   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

转载于:https://www.cnblogs.com/Tonyyang/archive/2008/05/29/1209683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值