SQLServer批量修改数据类型

2022-05-20  本文已影响0人  书生成续缘
数据类型varchar修改为nvarchar
--- 使用哪个数据库
USE [xxxx]
DECLARE @name nvarchar(100)
DECLARE @fieldName nvarchar(100)
DECLARE @fieldType nvarchar(100)
DECLARE @leng nvarchar(50)
DECLARE @nums int 
SET @nums=0
DECLARE CURSOR1 CURSOR SCROLL for (SELECT name FROM sysobjects WHERE xtype = 'U' AND name LIKE 'egd_%')    ---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 systypes.name = 'varchar'
                    ) ---要查询的类型
                    
                    OPEN CURSOR2
                        FETCH FIRST FROM CURSOR2 INTO @fieldName,@fieldType,@leng
                            WHILE (@@FETCH_STATUS=0)
                                BEGIN
                                    BEGIN try
                                        SET @nums = @nums+1
                                        --PRINT ('alter table '+@name+' alter column '+@fieldName+' nvarchar('+@leng+')')
                                        EXECUTE('alter table '+@name+' alter column '+@fieldName+' nvarchar('+@leng+')')    
                                        SET @nums = @nums+1
                                    END try
                                    BEGIN catch
                                        PRINT (@NAME+'   '+@fieldName+'  '+@fieldType+'  '+@leng)
                                        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
上一篇 下一篇

猜你喜欢

热点阅读