В предположении, что вы используете только «системные типы» в своих таблицах, вы можете искать столбцы с типами, которые вы хотите изменить, и вызывать обновления в курсоре.
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
Если вы также используете «типы псевдонимов», вам придется пройти немного больше боли, чтобы исправить их.