如何将每个nvarchar列更改为varchar?

时间:2009-12-03 19:59:45

标签: sql-server-2005

将数据库中的每个nvarchar列更改为varchar的最简单方法是什么?

我个人更喜欢nvarchar,但数据档已指定必须使用varchar。

3 个答案:

答案 0 :(得分:15)

在这里,为了让你开始:

Select 'Alter Table [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] Alter Column [' + COLUMN_NAME + '] VarChar(' + CAST(CHARACTER_MAXIMUM_LENGTH As VARCHAR) + ')'
From INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'NVARCHAR'

这将为您生成所有需要的alter语句(剪切,粘贴,运行)。

请注意,这不会考虑任何约束。

答案 1 :(得分:4)

为了处理MAX并排除niggly sysdiagrams:

SELECT 
'
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME + '] 
ALTER COLUMN [' + COLUMN_NAME + '] 
VARCHAR(' + 
    (CASE WHEN CHARACTER_MAXIMUM_LENGTH = -1 
        THEN 'MAX' 
        ELSE CAST(CHARACTER_MAXIMUM_LENGTH AS VARCHAR) 
    END)
 + ')
'
FROM INFORMATION_SCHEMA.COLUMNS
WHERE DATA_TYPE = 'NVARCHAR' AND TABLE_NAME <> 'SYSDIAGRAMS'

答案 2 :(得分:3)

请求数据库执行此操作?

生成系统中所有对象的脚本,然后更改nvarchar,然后创建一个新数据库并从旧数据库中导入数据。

编写alter脚本以更新现有数据库 (如果它是生产数据库或客户端数据库,这可能是最好的方法。)