none
rodar uma mesma query em vários bancos via script RRS feed

  • Pergunta

  • Olá pessoal,

     

    Estou tentando desenvolver uma query que rode via script em todos os bancos presentes no servidor já tentei declarar variaveis do tipo texto para armarzenar os nomes dos bancos e posteriormente utilizar a instrução USE 'Bancox' dentro de um loop porém sem sucesso.

    Só preciso de uma pequena luz, peço desculpas por não postar o código que escrevi aqui pois acabei o perdendo na minha ultima formatação.

    Um abraço a todos!

    segunda-feira, 20 de dezembro de 2010 12:24

Respostas

  • Um exemplo dosp_msforeachdb:

     

    exec sp_MSforeachdb @command1 =

    '

    BEGIN

    if ''?'' <> ''master'' and ''?'' <> ''tempdb'' and ''?'' <> ''model'' and ''?'' <> ''msdb''

    begin

          select ''?'' Base,name Tabela from [?]..sysobjects

    where xtype = ''u''

    and id not in (

                            select distinct id from [?]..sysindexes

                            where first is not null

                            and indid <> 0

                         )

    order by name

    end

    END

    '


    Marco Antônio Pinheiro / MCTS - Database Developer 2008 http://marcoantoniopinheiro.blogspot.com Se o post foi útil, não esqueça de marcá-lo.
    segunda-feira, 20 de dezembro de 2010 14:07

Todas as Respostas

  • Bom dia Fernando,

    Existem algumas soluções que conheco, vou te falar sobre elas, ai voce escolhe qual é a que mais se adapta a voce.

    1 - Existe um comando chamado sp_msforeachdb'', onde dentro do '' voce passa os comandos que deveram ser rodados, na mesma, voce consegue especificar as bases com um IF ''?'' in (''base1'',''base2'....) BEGIN USE ?

    2 - Query dinamica (prefiro essa), que é algo mais ou menos assim:

    DECLARE @script varchar(max)

    DECLARE @sql varchar(max)

    SET @script=''

    SET @sql=''

    SET @script='(seu codigo que devera ser aplicado as bases)'

    select @sql=@sql+CHAR(13)+ 'USE '+ name +CHAR(13)+CHAR(13)+@script+CHAR(13)

    FROM sys.databases

    WHERE (seu filtro das bases)

    print (@sql)

    exec (@sql)

    segunda-feira, 20 de dezembro de 2010 12:30
    Moderador
  • Um exemplo dosp_msforeachdb:

     

    exec sp_MSforeachdb @command1 =

    '

    BEGIN

    if ''?'' <> ''master'' and ''?'' <> ''tempdb'' and ''?'' <> ''model'' and ''?'' <> ''msdb''

    begin

          select ''?'' Base,name Tabela from [?]..sysobjects

    where xtype = ''u''

    and id not in (

                            select distinct id from [?]..sysindexes

                            where first is not null

                            and indid <> 0

                         )

    order by name

    end

    END

    '


    Marco Antônio Pinheiro / MCTS - Database Developer 2008 http://marcoantoniopinheiro.blogspot.com Se o post foi útil, não esqueça de marcá-lo.
    segunda-feira, 20 de dezembro de 2010 14:07
  • Gostaria de salvar todos resultados em um único CSV. É possível?

    quinta-feira, 10 de agosto de 2017 15:33