我遇到的情况是我必须使用脚本将现有的数据库结构从varchar更新为nvarchar.由于每次运行配置应用程序时都会运行此脚本,因此我宁愿确定列是否已更改为nvarchar而不是对表执行alter.我必须支持的数据库是SQL Server 2000,2005和2008.
您可以运行以下脚本,它将为您提供一组ALTER命令:
SELECT 'ALTER TABLE ' + isnull(schema_name(syo.id), 'dbo') + '.' + syo.name + ' ALTER COLUMN ' + syc.name + ' NVARCHAR(' + case syc.length when -1 then 'MAX' ELSE convert(nvarchar(10),syc.length) end + ');' FROM sysobjects syo JOIN syscolumns syc ON syc.id = syo.id JOIN systypes syt ON syt.xtype = syc.xtype WHERE syt.name = 'varchar' and syo.xtype='U'
但是,对你来说有几个快速的警告.
这只会做表格.您将要扫描所有的sprocs和函数,以确保它们也被更改NVARCHAR
为.
如果您有VARCHAR
> 4000,则需要将其修改为NVARCHAR(MAX)
但是这些模板应该很容易实现.
如果您希望自动运行,可以在WHILE
子句中设置它.