代码之家  ›  专栏  ›  技术社区  ›  Agent_Spock

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

  •  1
  • Agent_Spock  · 技术社区  · 7 年前

    您可能会发现问题与这两个链接重复( Link1 Link2 )但是他们没有得到正确的回答。让我向你简要介绍一下我真正想要什么。

    寻找

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

    我的本地SQL Server实例名为 Office PC\sqlExpress

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

    1) Source :当我使用下面的代码时,它会说 遥远的 当指定的实例存在时 地方的 .

    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 回复  |  直到 7 年前
        1
  •  2
  •   Jeroen Mostert    7 年前

    这比我想的要复杂一点,但是 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
    

    免责声明:未对所有可能的运输进行彻底测试。这适用于本地内存连接、本地数据库实例和TCP/IP连接,但如果使用(罕见的)远程命名管道或通过传输,则可能无法正常工作。默认情况下禁用这些。

        2
  •  0
  •   gofr1    7 年前

    你可以用 SERVERPROPERTY 这样地:

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

    计算机名

    运行服务器实例的Windows计算机名。

    对于群集实例,运行在 Microsoft群集服务上的虚拟服务器,它返回 虚拟服务器。