将数据库中的每个nvarchar列更改为varchar的最简单方法是什么?
我个人更喜欢nvarchar,但数据档已指定必须使用varchar。
答案 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脚本以更新现有数据库 (如果它是生产数据库或客户端数据库,这可能是最好的方法。)