引用链接服务器而不指定服务器名称

时间:2014-01-12 07:11:12

标签: sql-server connection-string linked-server

我有一台运行SQL Server实例的远程服务器。我只能通过VPN访问它,但我的用户希望能够在不使用VPN的情况下连接到它。

我的计算机上也运行了SQL Server,并希望用户通过我的计算机连接到远程服务器。我已阅读有关链接服务器的信息,但似乎我必须在每个查询中使用服务器名称。 例如:

select * from [192.168.0.45].[tblUser]

我希望使用链接服务器的其他用户只需使用表名。例如:

select * from tblUser

此外,当我使用链接服务器时,我必须在连接字符串中使用“master”,即使这不是我的数据库。

1 个答案:

答案 0 :(得分:2)

您必须使用four-part-name引用远程对象是不可避免的,但您可以使用同义词使远程表看起来像本地表。

四部分名称由[The server name].[The remote database name].[The remote schema (usually dbo)].[The remote table name]组成,必须为针对链接服务器的查询指定所有部分。

但是,您可以在本地数据库中create a synonym,以避免每次引用表时都必须指定四部分名称。

CREATE SYNONYM [synonymName] FOR [four].[part].[name].[here]


例如,您可以通过为每个表创建同义词来代理整个数据库。以下内容应该有效:

SELECT DISTINCT 'CREATE SCHEMA ['+TABLE_SCHEMA+'];'
FROM [INFORMATION_SCHEMA].[TABLES]
WHERE TABLE_SCHEMA <> 'dbo';

SELECT 'CREATE SYNONYM ['+TABLE_SCHEMA+'].['+TABLE_NAME+'] FOR [192.168.0.45].['+TABLE_CATALOG+'].['+TABLE_SCHEMA+'].['+TABLE_NAME+'];'
FROM [INFORMATION_SCHEMA].[TABLES];

运行这样的脚本将生成一个脚本,您可以在服务器上运行该脚本作为代理来创建所有同义词。

相关问题