更新数据类型的最快方法

时间:2011-03-07 11:34:33

标签: sql-server-2005

需要升级数据库,并且作为升级的一部分,我想将dbo架构中的所有TEXT / NTEXT字段转换为NVARCHAR(MAX)数据类型。但是,这些字段中的数据无法修改。

此升级需要通过SQL脚本完成!

那么,怎么做呢? (无需编写ALTER TABLE bla ALTER COLUMN blabla NVARCHAR(MAX) blablabla ...)

1 个答案:

答案 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

如果您还使用“别名类型”,则必须更加痛苦地修复它们。