Tenho um SQL Server 2008R2 e desejo me conectar remotamente a um SQL Server 2012SP1, para o qual recebo:
IP: 12.34.56.78
Login: john
Password: pw1
Database: TESTDB
Table: test_table
O banco de dados remoto está fora da minha LAN, mas o firewall está configurado em ambos os lados, então posso consultá-lo abrindo o SSMS diretamente do meu servidor de banco de dados. Eu executo o seguinte:
EXEC sp_addlinkedserver '12.34.56.78', 'SQL Server';
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = [12.34.56.78], @locallogin = NULL , @useself = N'False', @rmtuser = 'john', @rmtpassword = 'pw1'
Até agora, nenhum erro e posso ver o servidor vinculado no SSMS, "Test Connection" é bem-sucedido, mas não consigo consultá-lo.
select * from [12.34.56.78].TESTDB.test_table
Retorna este erro:
Msg 208, Level 16, State 1, Line 1
Invalid object name '12.34.56.78.TESTDB.test_table'.
Qual é a maneira correta de definir um servidor vinculado da Internet e, se possível, atribuir um bom nome a ele (em vez de se referir a ele por IP)? Devo usar o SQLNCLI como provedor?
Está faltando o nome do esquema em sua consulta. Deve ser [LINKED_SERVER].[DB_NAME].[SCHEMA_NAME].[OBJECT_NAME]. Portanto, no seu caso, [12.34.56.78].TESTDB.[AQUI DEVE ESTAR SEU ESQUEMA FALTANTE].test_table
É um endereço IP público. Espero que seja o endereço de um firewall que roteia o tráfego para um SQL Server! Se tiver um nome DNS atribuído a ele, você poderá usá-lo. Ou você pode criar um SINÔNIMO e esquecer de digitar esse nome longo.