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

Check if a named SQL Server Instance is running on local computer or not

您可能会发现问题与这 2 个 link (Link1 and Link2) 重复,但没有得到正确回答。让我向您简要说明我真正想要的问题。

正在寻找

我正在寻找一种方法来检查所提供的 SQL 实例名称 是否在本地可用或驻留在另一台远程计算机上。

我的本地 SQL 服务器实例名称是 Office-PC\SQLEXPRESS

我找到的解决方案不起作用

1) Source :当我使用下面的代码时,它说 remote 而指定的实例存在 local

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) 我还在某处(找不到 link)读到我们可以从 Registry 本身获取实例名称。

我能找到的就这些了。

如果有人有任何其他方法来查找所提供的命名 SQL 实例是否在本地可用,请告诉我。

您可以这样使用 SERVERPROPERTY

SELECT CASE WHEN HOST_NAME()=SERVERPROPERTY('MachineName') THEN 'local' ELSE 'remote' END

MachineName

Windows computer name on which the server instance is running.

For a clustered instance, an instance of SQL Server running on a virtual server on Microsoft Cluster Service, it returns the name of the virtual server.

这比我想要的要复杂一些,但是 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 传输,它可能无法正常工作。默认情况下禁用这些。