检查命名的SQL Server实例是否在本地计算机上运行

时间:2018-07-03 13:10:46

标签: sql-server sql-server-2008-r2

您可能会发现问题与这两个链接(Link1Link2)重复,但未正确回答。让我向您介绍我真正想要的问题。

寻找

我正在寻找一种方法来检查提供的 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实例是否在本地可用,请告诉我。

2 个答案:

答案 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群集服务上的虚拟服务器,它返回   虚拟服务器。