我有一台运行SQL Server实例的远程服务器。我只能通过VPN访问它,但我的用户希望能够在不使用VPN的情况下连接到它。
我的计算机上也运行了SQL Server,并希望用户通过我的计算机连接到远程服务器。我已阅读有关链接服务器的信息,但似乎我必须在每个查询中使用服务器名称。 例如:
select * from [192.168.0.45].[tblUser]
我希望使用链接服务器的其他用户只需使用表名。例如:
select * from tblUser
此外,当我使用链接服务器时,我必须在连接字符串中使用“master”,即使这不是我的数据库。
答案 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];
运行这样的脚本将生成一个脚本,您可以在服务器上运行该脚本作为代理来创建所有同义词。