需要升级数据库,并且作为升级的一部分,我想将dbo架构中的所有TEXT / NTEXT字段转换为NVARCHAR(MAX)数据类型。但是,这些字段中的数据无法修改。
此升级需要通过SQL脚本完成!
那么,怎么做呢?
(无需编写ALTER TABLE bla ALTER COLUMN blabla NVARCHAR(MAX) blablabla
...)
答案 0 :(得分:2)
假设您只在表中使用“系统类型”,您可以使用要更改的类型查找列,并在游标中调用更新。
declare @nsql nvarchar(2000)
, @table sysname
, @column sysname
, @type sysname
, @is_nullable bit
declare cur cursor local read_only
for
select tableName = OBJECT_NAME([object_id]), columnName = name, type = TYPE_NAME(system_type_id), is_nullable from sys.columns where TYPE_NAME(system_type_id) in ('text', 'ntext')
open cur
fetch next from cur into @table, @column, @type, @is_nullable
WHILE (@@FETCH_STATUS = 0)
BEGIN
select @nsql = N'ALTER TABLE ' + quotename(@table) + N' ALTER COLUMN ' + quotename(@column) + N' '
if @type = N'text'
select @nsql = @nsql + N' VARCHAR(MAX)'
if @type = N'ntext'
select @nsql = @nsql + N' NVARCHAR(MAX)'
if @is_nullable = 0
select @nsql = @nsql + N' NOT NULL'
exec(@nsql)
fetch next from cur into @table, @column, @type, @is_nullable
END
close cur
deallocate cur
如果您还使用“别名类型”,则必须更加痛苦地修复它们。