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

Cod*_*313 7 sql-server-2005

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

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

Stu*_*Stu 16

在这里,为了让你开始:

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'
Run Code Online (Sandbox Code Playgroud)

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

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

  • +1完美.我得到了相同的解决方案...但是有一个非常非常丑陋和复杂的查询...... (2认同)

Eve*_*ien 5

为了处理MAX并排除小巧的系统图:

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'
Run Code Online (Sandbox Code Playgroud)