检查命名的 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 传输,它可能无法正常工作。默认情况下禁用这些。
您可能会发现问题与这 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 传输,它可能无法正常工作。默认情况下禁用这些。