1
數據庫需要升級,並且作爲升級的一部分,我想將dbo模式中的所有TEXT/NTEXT字段轉換爲NVARCHAR(MAX)數據類型。不過,這些字段中的數據無法修改。最快的方法來更改數據類型
此升級需要通過SQL腳本完成!
那麼,該怎麼做?
(而不必寫ALTER TABLE bla ALTER COLUMN blabla NVARCHAR(MAX) blablabla
...)
數據庫需要升級,並且作爲升級的一部分,我想將dbo模式中的所有TEXT/NTEXT字段轉換爲NVARCHAR(MAX)數據類型。不過,這些字段中的數據無法修改。最快的方法來更改數據類型
此升級需要通過SQL腳本完成!
那麼,該怎麼做?
(而不必寫ALTER TABLE bla ALTER COLUMN blabla NVARCHAR(MAX) blablabla
...)
在假設你只使用「系統類型」,在你的表,你可以查找列與要更改,並呼籲在光標更新的類型。
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
如果你還使用「別名類型」,你將不得不經受更多的痛苦來解決它們。
似乎完美的工作!沒有別名類型,所以沒有問題。 :-) – 2011-03-07 13:19:28