SqlServer 通用修改字段类型(多表)

起因:因为SqlServer 数据库不支持varchar 类型写入 韩文多语言 。

解决方式:修改varchar类型为 nvarchar 类型 ,nvarchar类型是占用两个字节,

其他问题:

1.SqlServer的主键最多900字节,所以不能将主键索引扩大,需要缩短主键长度。

2.text类型修改为ntext 需要先修改为nvarchar 才能 修改为ntext类型

sql 如下:


    
DECLARE @name nvarchar(100)
DECLARE @fieldName nvarchar(100)
DECLARE @fieldType nvarchar(100)
DECLARE @leng int
DECLARE @nums int 
set @nums=0
DECLARE CURSOR1 CURSOR SCROLL for (select name from sysobjects where xtype = 'u')    ---u 表 V 视图 P 函数
        OPEN CURSOR1
                

            fetch FIRST from CURSOR1 into @name
                    WHILE (@@FETCH_STATUS=0)
                    BEGIN

        DECLARE cursor2 CURSOR SCROLL for (
                 select syscolumns.name as fieldName ,systypes.name as fieldType,syscolumns.length as leng
           from syscolumns inner join systypes on systypes.xtype=syscolumns.xtype
             where id=(select id from sysobjects where  name=@name) and syscolumns.name like '%digest%'  --and  systypes.name ='nvarchar'
                            ) ---要查询的类型
                                    
                                        OPEN CURSOR2
                                            fetch FIRST from CURSOR2 into @fieldName,@fieldType,@leng
                                                    WHILE (@@FETCH_STATUS=0)
                                                    BEGIN
                                            BEGIN try
                                                    set  @nums=@nums+1
                                                    
                                                        --    BEGIN
                                                ----    EXECUTE('alter table '+@name+' alter column '+@fieldName+' nvarchar(100)')---更改类型
                                                --    EXECUTE('alter table '+@name+' alter column '+@fieldName+' ntext')    
                                                            print    (@NAME+'   '+@fieldName+'  '+@fieldType)
                                                            EXECUTE('alter table '+@name+' alter column '+@fieldName+' nvarchar('+@leng+')')    
                                                            set  @nums=@nums+1
                                                        --    END
                                            end try
                                                    BEGIN catch
                                                    print    (@NAME+'   '+@fieldName+'  '+@fieldType)
                                                        set  @nums=@nums+1
                                            fetch next from CURSOR2 into @fieldName,@fieldType,@leng
                                                    END catch
                                                        
                                                            
                                            fetch next from CURSOR2 into @fieldName,@fieldType,@leng
        
                                            end
                                    close CURSOR2  
                                    deallocate   CURSOR2    
                            
                                    
                    
        
            fetch next from CURSOR1 into @name
                
                    end
                    
            close CURSOR1  
            deallocate   CURSOR1    
    print @nums

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值