none
Procedure para comparação de resultados RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Estou com uma dúvida, no desenvolvimento  de uma procedure para executar uma comparação de nomes.

    Preciso realizar um select nos nomes na sysdatabases, coletar os  nomes das bases da instância e armazena-los em uma tabela temporária ou num array. Depois preciso fazer uma comparação entre outra tabela do do banco.

    Se o resultado do select da tabela temporaria tiver algum algum nome de banco diferente da tabela física, inserir somente esse nome diferente na tabela física.

    Vou realizar esse procedimento em várias instâncias, porém estou com dificuldade no desenvolvimento da ideia.

    Caso alguém tenha alguma dica, será de muito valia, obrigado!!!

    quinta-feira, 25 de abril de 2013 16:51

Respostas

  • Lima, veja abaixo o exemplo que criei, a logica acredito que deva ser a mesma que voce vai utilizar na sua procedure:

    -- carrega na temporaria #temp o nome das bases
    select
    	name
    into #temp
    		from sys.sysdatabases
    		
    -- vamos supor que sua tabela fisica seja a #TabelaFisica
    -- so para teste vou colocar 2 nomes somente
    select top 2 * into #TabelaFisica from #temp
    
    --insere na tabela fisica o que existe na temporaria e nao existe na fisica
    
    insert into #TabelaFisica
    select 
    	Name
    		from #temp
    where name not in (select name from #TabelaFisica)
    
    


    Alexandre Matayosi Conde Mauricio.

    • Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 25 de abril de 2013 17:51
    • Marcado como Resposta Lima 83 quinta-feira, 25 de abril de 2013 20:30
    quinta-feira, 25 de abril de 2013 17:20
  • Lima,

    Se você estiver utilizando uma versão igual ou superior ao SQL Server 2008, poderia utilizar o comando Merge para esta solução.

    Veja o exemplo abaixo:

    Create Table Loja1
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    Create Table Loja2
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    Create Table Lojas
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    
    Insert Into Loja1 Values (IsNull(@@Identity,1),'Loja 1')
    Go 20
    
    Insert Into Loja1 Values (IsNull(@@Identity,1),'Loja 2')
    Go 15
    
    Merge Lojas Destino
    Using Loja1 Origem
    On Origem.Codigo = Destino.Codigo
    When Not Matched Then
     Insert Values(CodProduto, Descricao)
    When Matched Then
     Update Set Destino.Codigo = Origem.Codigo;
    
    Merge Lojas Destino
    Using Loja2 Origem
    On Origem.Codigo = Destino.Codigo
    When Matched Then
     Update Set Destino.Descricao = 'Em ambas as lojas'
    When Not Matched Then
     Insert Values (CodProduto, Descricao);


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Lima 83 quinta-feira, 25 de abril de 2013 20:30
    quinta-feira, 25 de abril de 2013 17:52

Todas as Respostas

  • Lima, veja abaixo o exemplo que criei, a logica acredito que deva ser a mesma que voce vai utilizar na sua procedure:

    -- carrega na temporaria #temp o nome das bases
    select
    	name
    into #temp
    		from sys.sysdatabases
    		
    -- vamos supor que sua tabela fisica seja a #TabelaFisica
    -- so para teste vou colocar 2 nomes somente
    select top 2 * into #TabelaFisica from #temp
    
    --insere na tabela fisica o que existe na temporaria e nao existe na fisica
    
    insert into #TabelaFisica
    select 
    	Name
    		from #temp
    where name not in (select name from #TabelaFisica)
    
    


    Alexandre Matayosi Conde Mauricio.

    • Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 25 de abril de 2013 17:51
    • Marcado como Resposta Lima 83 quinta-feira, 25 de abril de 2013 20:30
    quinta-feira, 25 de abril de 2013 17:20
  • Lima,

    Se você estiver utilizando uma versão igual ou superior ao SQL Server 2008, poderia utilizar o comando Merge para esta solução.

    Veja o exemplo abaixo:

    Create Table Loja1
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    Create Table Loja2
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    Create Table Lojas
    (Codigo Int Identity(1,1),
     CodProduto Int,
     Descricao Varchar(10))
    
    
    Insert Into Loja1 Values (IsNull(@@Identity,1),'Loja 1')
    Go 20
    
    Insert Into Loja1 Values (IsNull(@@Identity,1),'Loja 2')
    Go 15
    
    Merge Lojas Destino
    Using Loja1 Origem
    On Origem.Codigo = Destino.Codigo
    When Not Matched Then
     Insert Values(CodProduto, Descricao)
    When Matched Then
     Update Set Destino.Codigo = Origem.Codigo;
    
    Merge Lojas Destino
    Using Loja2 Origem
    On Origem.Codigo = Destino.Codigo
    When Matched Then
     Update Set Destino.Descricao = 'Em ambas as lojas'
    When Not Matched Then
     Insert Values (CodProduto, Descricao);


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Lima 83 quinta-feira, 25 de abril de 2013 20:30
    quinta-feira, 25 de abril de 2013 17:52
  • Perfeito pessoal,

    Funcionou certinho, agradeço pelas dicas, forte abraço!!!

    quinta-feira, 25 de abril de 2013 20:29