【发布时间】:2009-12-03 19:59:45
【问题描述】:
将数据库中的每个 nvarchar 列更改为 varchar 的最简单方法是什么?
我个人更喜欢 nvarchar,但数据架构已指定必须使用 varchar。
【问题讨论】:
标签: sql-server-2005
将数据库中的每个 nvarchar 列更改为 varchar 的最简单方法是什么?
我个人更喜欢 nvarchar,但数据架构已指定必须使用 varchar。
【问题讨论】:
标签: sql-server-2005
在这里,让您开始:
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'
这将为您生成所有需要的更改语句(剪切、粘贴、运行)。
请注意,这不考虑任何约束。
【讨论】:
为了处理 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'
【讨论】:
请数据拱手去做?
或
生成系统中所有对象的脚本,然后更改 nvarchar,然后创建一个新数据库并将数据从旧数据库导入其中。
或
编写更改脚本以更新现有数据库。
(如果是生产数据库或客户端数据库,这可能是最好的方法。)
【讨论】: