Vou mostrar para vocês um recurso muito útil do SQLServer que permite a integração entre diferentes servidores e fontes de dados. Isto permite que façamos Cross-Instance-Querys / Cross-Server-Querys a partir do Management Studio de forma tão natural como acessar diferentes bancos de dados ou esquemas de dados.

Este recurso – chamado de Linked Servers –  vem a atender em principal a necessidade de processamento de consultas de dados distribuído, porém é muito útil em cenários onde o consumo de fontes de dados externas – onde como mais simples podemos citar os WebServices – não são acessíveis ou não são viáveis, por diversos motivos, que vão desde limitações de tecnologia ou mesmo devido a complexidade em se alterar o ambiente para se usar o recurso apenas uma vez ou um número muito limitado de vezes, como checar a consistência entre sistemas de diferentes fornecedores.

Sua utilização permite que uma instância SQLServer se comunique com qualquer outro servidor de banco de dados visível no domínio, seja ele uma outra instância do próprio SQLServer instalado no mesmo computador, um servidor oracle instalado em outro servidor na rede, ou até mesmo mesmo uma planilha do Excel, bastando para isto ter os OLEDB Providers instalado no servidor.

Basicamente qualquer provider de banco de dados instalado no computador ou com suporte ODBC poderá ser acessado pelo servidor. Veja abaixo a arquitetura usada na comunicação entre os servidores:

Linked Server Comunication - Microsoft - Acessado em 01/11/2011 (http://msdn.microsoft.com/en-us/library/ms188279.aspx)

Linked Server Comunication – Microsoft – Acessado em 01/11/2011 (http://msdn.microsoft.com/en-us/library/ms188279.aspx)

Para registrar um novo servidor, vamos usar a Storaged Procedure sp_addlinkedserver. Como exemplo vamos conectar duas instâncias SQLServer no mesmo servidor, permitindo que a instância MSSQL_INST_A consiga enchergar e realizar operações em MSSQL_INST_B:

1) Conecte-se à instancia MSSQL_INST_A no Management Studio;
2) Execute o comando:

exec sp_addlinkedserver
N'MyServerName\MSSQL_INST_B', N'', 'SQLNCLI', 'MyServerName\MSSQL_INST_B'

Agora você já consgue, estando conectado na instância MSSQL_INST_A realizar operações em MSSQL_INST_B colocando o nome o sysname do servidor no caminho da tabela, assim como fazemos quanto consultamos diferentes esquemas de dados:

Select E.NomeProduto, E.PosicaoAtual, V.VALOR_UNITARIO_PRODUTO
From [MyServerName\MSSQL_INST_B].[bdSistemaB].[OPERACIONAL].[ESTOQUE] E
Inner Join [BD_SISTEMA_A].[VALOR_DE_VENDA] V
ON V.ID_PRODUTO = E.Id
Where V.Regional = 31 -- Belo Horizonte / MG
Order By E.NomeProduto

ou

Set IDENTITY_INSERT [MyServerName\MSSQL_INST_B].[bdSistemaB].[CADASTRO].[CLIENTE] ON
Insert into [MyServerName\MSSQL_INST_B].[bdSistemaB].[CADASTRO].[CLIENTE]
(Id, Nome, Cpf, Telefone, Email, Rua, Numero, Complemento, Bairro, Cidade, Estado, CEP)

Select Id, Nome, Cpf, Telefone, Email, Rua, Numero, Complemento, Bairro, Cidade, Estado, CEP
From [MyServerName\MSSQL_INST_A].[BD_SISTEMA_A].[CUSTOMERS]
Set IDENTITY_INSERT [MyServerName\MSSQL_INST_B].[bdSistemaB].[CADASTRO].[CLIENTE] OFF

Para consultar os servidores cadastrados basta fazer uma select em sys.servers:

Select * From sys.servers

E para remover a conexão basta usar a Storage Procedure sp_dropserver:

exec sp_dropserver N'MyServerName\MSSQL_INST_B'

Para ver todos os exemplos de conexão, providers testados e parâmetros de configuração acesse a documentação oficial clicando aqui and enjoy.