如何从远程SQL Server链接到SQL Server Express的本地实例添加链接服务器建立连接?在本地我的意思是我使用的SQL与SQL Server Express实例,而远程我指的是我用SSMS连接的服务器。主要是在网络上描述了相反的情况 - 从远程到本地。我从那个文档开始: https://docs.microsoft.com/en-us/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine
.\SQLExpress
或其他一些短语。 SQL Server
或Other data source
的内容? 答案 0 :(得分:4)
是。您不是要在其他要创建链接服务器的SQL Server上本地的。对于其他服务器,您的本地服务器是远程的。确保本地服务器可以使用SQL Server配置管理器接受网络连接。
如果使用SQL Server,则必须提供本地服务器的网络名称 - 您在SSMS中使用的名称。除非您使用localhost或“。”然后你需要找到它,你可以使用ipconfig /all
并查找主机名。假设本地服务器和其他服务器位于同一网络上,这将起作用。
使用其他服务器,您有更多选择。在链接服务器中,您提供您喜欢的任何内容,然后指定下面的连接信息。
Here you can find more information about values
您可以选择您的方案允许的内容。如果可以,请选择Sql Server
查看第2页中的链接
修改强>
免责声明我不是网络工程师,所以我可能会错过一些实际工作的关键步骤,而这只是大方向。
如果您在其他网络而不是其他服务器上,则必须在1433 TCP端口上打开防火墙,不仅在您的计算机上,而且在路由器上并将路由器的端口1433映射到您的计算机的端口1433.然后让您的路由器公共IP你应该能够链接两个服务器。有点像@MatSnow在评论中提到的SO范围。
答案 1 :(得分:4)
如果您发现“从远程到本地”这与您想要的相反,那么您可以想象您的PC就是服务器而服务器就是本地PC并且只需一台。 想象一下,你有2台机器:machine1和machine2。 将machine1上的链接服务器添加到machine2:只需在machine1上打开上面的新链接服务器页面即可。 链接服务器:(Machine2 IP地址) (已选择)SQL server
答案 2 :(得分:1)
我不会谈论您的IP,因为很明显您必须拥有公开/可访问的IP 这是先决条件
完成后,您已在防火墙中打开端口1433 ,因此无法阻止连接,因为您可以看到here
此时您只需照常添加链接服务器 IP /实例
答案 3 :(得分:1)
正如其他人所指出的那样。它的很多答案和成功取决于2台机器的通信能力。 DNS配置也是如此?防火墙?你能ping吗?你能解析机器名吗?您是否可以从一台服务器与另一台服务器通信?从本地计算机和远程服务器创建链接服务器(反之亦然)的区别实际上只是反转信息。您的本地计算机仍然需要是具有适当配置和权限的服务器,但如果是,那么它只是另一个SQL服务器。链接服务器仅依赖于具有2个能够通信的SQL服务器。
因为我经常工作远程(VPN)并且服务器无法始终解析我的机器DNS名称我使用以下脚本在远程服务器上创建链接服务器以通过IP地址连接到我的本地计算机我通过连接到服务器SSMS:
DECLARE @AutoExecute BIT = 1
DECLARE @LinkedServerName VARCHAR(50) = 'LinkedServername' --if null or blank the linked server will just get the instance name
DECLARE @InstanceAppend VARCHAR(45) = '\InstanceName' --make emptry string if none
DECLARE @user VARCHAR(20) = 'username'
DECLARE @password VARCHAR(20) = 'password'
DECLARE @SQL VARCHAR(MAX)
DECLARE @IPAddress VARCHAR(255)
DECLARE @Instance VARCHAR(300)
DECLARE @SrvName VARCHAR(300)
SELECT @IPAddress = client_net_address
,@Instance = client_net_address + ISNULL(@InstanceAppend,'')
FROM
sys.dm_exec_connections
WHERE Session_id = @@SPID;
SET @SrvName = CASE WHEN LEN(@LinkedServerName) > 0 THEN @LinkedServerName ELSE @Instance END
IF NOT EXISTS (SELECT * FROM sys.servers WHERE name = @SrvName)
BEGIN
IF (LEN(@LinkedServerName) > 0)
BEGIN
SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @LinkedServerName + ''',@provider=''SQLOLEDB'', @srvproduct=N'''', @datasrc=N''' + @Instance + ''''
END
ELSE
BEGIN
SET @SQL = 'EXECUTE master.dbo.sp_addlinkedserver @server = N''' + @Instance + ''', @srvproduct=N''SQL Server'''
END
SET @SQL = @SQL + CHAR(13) + 'EXECUTE master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''' + @SrvName + ''',@useself=N''False'',@rmtuser=''' + @user + ''', @rmtpassword=''' + @password + ''''
END
ELSE
BEGIN
PRINT 'Linked Server Exists'
END
PRINT @SQL
IF (@AutoExecute = 1)
BEGIN
BEGIN TRY
EXECUTE (@SQL)
PRINT 'Executed Successfully'
END TRY
BEGIN CATCH
PRINT 'Failed To Execute'
;THROW
END CATCH
END