car*_*reo 2 sql-server linked-server
我有一个 SQL Server 2008R2,我想远程连接到 SQL Server 2012SP1,为此我得到了:
IP: 12.34.56.78
Login: john
Password: pw1
Database: TESTDB
Table: test_table
Run Code Online (Sandbox Code Playgroud)
远程数据库在我的局域网之外,但是两边都配置了防火墙,所以我可以通过直接从我的数据库服务器打开SSMS来查询它。我执行以下操作:
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'
Run Code Online (Sandbox Code Playgroud)
到目前为止,没有错误,我可以在SSMS中看到链接服务器,“测试连接”成功但我无法查询。
select * from [12.34.56.78].TESTDB.test_table
Run Code Online (Sandbox Code Playgroud)
返回此错误:
Msg 208, Level 16, State 1, Line 1
Invalid object name '12.34.56.78.TESTDB.test_table'.
Run Code Online (Sandbox Code Playgroud)
从 Internet 定义链接服务器的正确方法是什么,如果可能,为其分配一个好听的名称(而不是通过 IP 引用它)?我应该使用 SQLNCLI 作为提供程序吗?
小智 5
您在查询中缺少架构名称。它应该是 [LINKED_SERVER].[DB_NAME].[SCHEMA_NAME].[OBJECT_NAME]。所以在你的情况下,[12.34.56.78].TESTDB.[这里应该是你缺少的架构].test_table
这是一个公共IP地址。希望它是将流量路由到 SQL Server 的防火墙地址!如果它有分配给它的 DNS 名称,那么您可以使用它。或者您可以创建一个SYNONYM而忘记输入这个长名称。
CREATE SYNONYM [schema].[synonym_name] FOR [LINKED_SERVER].[DB_NAME].[SCHEMA_NAME].[OBJECT_NAME]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |