2011-03-07 63 views
1

數據庫需要升級,並且作爲升級的一部分,我想將dbo模式中的所有TEXT/NTEXT字段轉換爲NVARCHAR(MAX)數據類型。不過,這些字段中的數據無法修改。最快的方法來更改數據類型

此升級需要通過SQL腳本完成!

那麼,該怎麼做?
(而不必寫ALTER TABLE bla ALTER COLUMN blabla NVARCHAR(MAX) blablabla ...)

回答

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 

如果你還使用「別名類型」,你將不得不經受更多的痛苦來解決它們。

+0

似乎完美的工作!沒有別名類型,所以沒有問題。 :-) – 2011-03-07 13:19:28