Usuário com melhor resposta
Consultar múltiplas instâncias do ssql server na mesma query

Pergunta
-
Olá a todos.
Gostaria de saber como consultar mais de uma instância (em servidores diferentes) na mesma query.
Por exemplo: Instância padrão no servidor A tem um banco chamado dbteste. Instância padrão no servidor B tem um banco chamado dbteste2.
Na mesma consulta quero retornar dados dos dois bancos. Além disso, é possível fazer essa consulta pelo sqlcmd?
SMRBKP
Respostas
-
Amigo,
Do modo que o William indicou é possível você efetuar a consulta "semelhante", definindo apenas o nome do "linkedserver" e do "banco de dados". A vantagem neste caso é que você poderá utilizar essa instrução para consulta no "sqlcmd" da mesma forma que você utiliza no SSMS.
Caso você precise realizar a mesma consulta "exatamente" da mesma forma entre duas instâncias com tabelas idêntidas cada um destes bancos de dados, então recomendo que você utilize o recurso do SSMS "multiple queries" usando a janela "Registered Servers" (menu "View" => "Registered Servers" ou teclas de atalho CTRL+ALT+G).
Após abrir esta janela, clique com o botão direito em "Local Server Group" para obter as opções de configuração.
Você poderá criar um novo "Server Group" e adicionar um "Server Registration" para cada instância SQL que você pretende consultar. Como opção para esta necessidade, você poderá definir na aba "Connection Properties" na janela "New Server Registration" um banco de dados específico para esta consulta (caso contrário, você estará consultando todos os bancos de dados). Veja na imagem abaixo:
1 - Crie o Grupo;
2 - Adicione um novo "Server Registration" para cada instância que deseja consultar;
2.b - Selecione ou digite o nome de um banco de dados específico;
3 - Abra uma nova consulta, selecionando a opção "New Query" e digite a instrução SELECT que você deseja.
Nesta demonstração eu apenas fiz um COUNT de registros de duas tabelas com o mesmo nome, que existem em dois bancos de dados diferentes, em instâncias distintas. Veja na imagem abaixo:
A única desvantagem para sua necessidade é que esta solução é exclusiva do SSMS, e não há algo semelhante no "sqlcmd" (talvez em PowerShell).
Para maiores informações veja:
https://msdn.microsoft.com/pt-br/library/ms190631.aspx
https://msdn.microsoft.com/pt-br/library/ms188231.aspx
https://technet.microsoft.com/pt-br/library/ms173574(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Editado Durval RamosModerator terça-feira, 31 de março de 2015 19:09 Adicionando referencias
- Sugerido como Resposta Eduardo.Romero quarta-feira, 1 de abril de 2015 12:42
- Marcado como Resposta Matheus L. M. C. Campos quinta-feira, 2 de abril de 2015 03:41
Todas as Respostas
-
Para isso vc vai ter que usar o linked server:
https://technet.microsoft.com/pt-br/library/aa174516(v=sql.80).aspx?f=255&mspperror=-2147217396
O link é para o SQL 2000, mas vale para todas as versoes.
outros links que podem te ajudar:
https://msdn.microsoft.com/en-us/library/ff772782.aspx
http://stackoverflow.com/questions/1144051/selecting-data-from-two-different-servers-in-sql-server
aqui esta a documentaçao do sp_addlinkedserver :
https://msdn.microsoft.com/en-us/library/ms190479.aspx
uma vez criado o linked server em uma das suas instancias, voce pode fazer o union (ou join) desta forma:
select campo1, campo from tabelaA union select campo1, campo from [OtherServerName].[OtherDB].[dbo].[tabelaA]
onde "OtherServerName" é o linked server.
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam Trindade terça-feira, 31 de março de 2015 13:41
- Sugerido como Resposta Eduardo.Romero quarta-feira, 1 de abril de 2015 12:42
- Não Sugerido como Resposta Matheus L. M. C. Campos quinta-feira, 2 de abril de 2015 03:42
-
Amigo,
Do modo que o William indicou é possível você efetuar a consulta "semelhante", definindo apenas o nome do "linkedserver" e do "banco de dados". A vantagem neste caso é que você poderá utilizar essa instrução para consulta no "sqlcmd" da mesma forma que você utiliza no SSMS.
Caso você precise realizar a mesma consulta "exatamente" da mesma forma entre duas instâncias com tabelas idêntidas cada um destes bancos de dados, então recomendo que você utilize o recurso do SSMS "multiple queries" usando a janela "Registered Servers" (menu "View" => "Registered Servers" ou teclas de atalho CTRL+ALT+G).
Após abrir esta janela, clique com o botão direito em "Local Server Group" para obter as opções de configuração.
Você poderá criar um novo "Server Group" e adicionar um "Server Registration" para cada instância SQL que você pretende consultar. Como opção para esta necessidade, você poderá definir na aba "Connection Properties" na janela "New Server Registration" um banco de dados específico para esta consulta (caso contrário, você estará consultando todos os bancos de dados). Veja na imagem abaixo:
1 - Crie o Grupo;
2 - Adicione um novo "Server Registration" para cada instância que deseja consultar;
2.b - Selecione ou digite o nome de um banco de dados específico;
3 - Abra uma nova consulta, selecionando a opção "New Query" e digite a instrução SELECT que você deseja.
Nesta demonstração eu apenas fiz um COUNT de registros de duas tabelas com o mesmo nome, que existem em dois bancos de dados diferentes, em instâncias distintas. Veja na imagem abaixo:
A única desvantagem para sua necessidade é que esta solução é exclusiva do SSMS, e não há algo semelhante no "sqlcmd" (talvez em PowerShell).
Para maiores informações veja:
https://msdn.microsoft.com/pt-br/library/ms190631.aspx
https://msdn.microsoft.com/pt-br/library/ms188231.aspx
https://technet.microsoft.com/pt-br/library/ms173574(v=sql.105).aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval Ramos
Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
----------------------------------
Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"- Editado Durval RamosModerator terça-feira, 31 de março de 2015 19:09 Adicionando referencias
- Sugerido como Resposta Eduardo.Romero quarta-feira, 1 de abril de 2015 12:42
- Marcado como Resposta Matheus L. M. C. Campos quinta-feira, 2 de abril de 2015 03:41