Olá amigo,
Aso seja necessário para diversos banco, aocnselho modificar a procedure para utilizar o msforeachdb ao invés de criar esta em diversos bancos.
Utilize a seguinte procedure:
alter procedure pr_char_to_varchar
as
begin
declare @tabela varchar(1000), @coluna varchar(100) , @tamanho varchar(10), @cmd nvarchar(4000)
select sc.name, OBJECT_NAME(sc.id) tabela ,sc.length into #tb_temp from syscolumns sc join sysobjects so on sc.id = so.id
where so.type = 'u' and sc.xtype = 175 and sc.length > 20
declare vai cursor
for select name,tabela,length from #tb_temp
open vai
fetch next from vai into @coluna ,@tabela,@tamanho
while @@fetch_status = 0
begin
alter table char_40 alter column col1 char(40)
set @cmd = 'alter table '+@tabela+' alter column '+@coluna+' varchar('+@tamanho+')'
print 'tabela_|_coluna modificadas: '+@tabela+'_|_'+@coluna
exec sp_executesql @cmd
fetch next from vai into @coluna ,@tabela,@tamanho
end
close vai
deallocate vai
end
Abraço.