您可能会发现问题与这两个链接(Link1和Link2)重复,但未正确回答。让我向您介绍我真正想要的问题。
我正在寻找一种方法来检查提供的 SQL实例名称 是否在本地可用或驻留在另一台远程计算机上。
我的本地SQL Server实例名称为 Office-PC \ SQLEXPRESS
1)Source:当我使用下面的代码时,当指定的实例存在 local 时,它说 remote 。
SELECT Case when HOST_NAME()=SERVERPROPERTY('Office-PC\SQLEXPRESS') then 'local' else 'remote' end
2)我尝试使用以下代码在不同网站上的许多评论中建议使用。但显示的输出不正确。
print HOST_NAME() //OUTPUT : Office-PC
print @@SERVERNAME //OUTPUT : HOME\SQLEXPRESS
3)有些人建议使用下面的命令来获取实例名称,该名称可以很好地工作,但是并不能告诉我们哪个实例在本地可用。
SQLCMD -L
4)我还读到某处(找不到链接),我们可以从注册表本身获取实例名称。
这就是我能找到的全部。
如果有人可以通过其他任何方式查找所提供的命名SQL实例是否在本地可用,请告诉我。
答案 0 :(得分:2)
这比我想要的复杂一点,但是HOST_NAME()
或服务器计算机名称不可靠,应该执行以下操作:
SELECT CASE
WHEN client_net_address IN ('<local machine>', '<named pipe>', local_net_address) THEN 'local'
ELSE 'remote'
END AS [ConnectionType]
FROM sys.dm_exec_connections
-- The parent_connection_id check covers MARS
WHERE session_id = @@SPID AND parent_connection_id IS NULL
免责声明:未对所有可能的运输工具进行彻底测试。这适用于本地内存连接,LocalDB实例和TCP / IP连接,但如果使用(很少)远程命名管道或VIA传输,则可能无法正常工作。这些默认情况下处于禁用状态。
答案 1 :(得分:0)
您可以像这样使用SERVERPROPERTY:
SELECT CASE WHEN HOST_NAME()=SERVERPROPERTY('MachineName') THEN 'local' ELSE 'remote' END
机器名称
运行服务器实例的Windows计算机名称。
对于群集实例,在Windows Server 2003上运行的SQL Server实例。 Microsoft群集服务上的虚拟服务器,它返回 虚拟服务器。