Usuário com melhor resposta
Procedure para comparação de resultados

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!!!
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
-
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
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
-
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
-