none
Store Procedure + alterar campo RRS feed

  • Pergunta

  • preciso de ajuda na seguinte questão

    preciso alterar todos os campos que sejam char > 20 para varchar e o tamanho definido

    no campo quando foi criado

    isto  tem que ser feito em todas as tabelas de um banco selecionado

    acho que uma store prodedure seria melhor.

    como fazer:

    obrigado

    segunda-feira, 25 de novembro de 2013 18:35

Respostas

  • obrigado pela ajuda

    mas quando executo

    Falha em ALTER TABLE ALTER COLUMN Type porque um ou mais objetos acessam esta coluna.

    • Marcado como Resposta jceoms quinta-feira, 28 de novembro de 2013 12:01
    terça-feira, 26 de novembro de 2013 11:15

Todas as Respostas

  • 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.

    segunda-feira, 25 de novembro de 2013 19:54
  • obrigado pela ajuda

    mas quando executo

    Falha em ALTER TABLE ALTER COLUMN Type porque um ou mais objetos acessam esta coluna.

    • Marcado como Resposta jceoms quinta-feira, 28 de novembro de 2013 12:01
    terça-feira, 26 de novembro de 2013 11:15