如何从T-SQL获取当前实例名称


90

如何使用T-SQL脚本获取SQL Server服务器和当前连接的实例名称?


接受的答案是正确的。SELECT @@SERVERNAME产生使用连接所需的结果sqlcmd -S。如果它是默认的MSSQLSERVER实例,则必须-S-参数中未指定它。这是2017年14.0.2002.14开发版,64位。
点燃

Answers:


165

刚刚在这个SO问题中找到了答案(从字面上看,在问题内部,没有任何答案):

SELECT @@servername

如果不是默认实例,则返回servername \ instance

SELECT @@servicename

返回实例名称,即使这是默认名称(MSSQLSERVER)


1
@blasto,这似乎是实例是服务器上的默认实例时的行为。尝试使用命名实例。检查一下:technet.microsoft.com/en-us/library/ms187944.aspx
GuillermoGutiérrez2014年

10
不正确,使用@@ servername可能会给您错误的答案。SELECT CONVERT(sysname,SERVERPROPERTY('servername'))是正确的答案。@@ ServerName报告SQL群集名称,而serverproperty('servername')报告Windows群集名称。您需要Windows群集名称才能连接到数据库(Windows群集名称可以与SQL群集名称不同;这通常是在另一台计算机上安装新的sql-server版本时发生的(@@ servername = Environment.MachineName)并希望保留旧名称,这样就不必更改所有配置)。
Stefan Steiger 2015年

1
@StefanSteiger链接的SO问题的可接受答案表示您提出的解决方案,但注释表明它不适用于某些人。
Trisped

17

这个怎么样:

EXECUTE xp_regread @rootkey='HKEY_LOCAL_MACHINE',
                   @key='SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQl',
                   @value_name='MSSQLSERVER'

这也将获得实例名称。null表示默认实例:

SELECT SERVERPROPERTY ('InstanceName')

http://technet.microsoft.com/zh-CN/library/ms174396.aspx


10
SELECT SERVERPROPERTY('InstanceName')给我一个NULL。
2014年

4
而是使用SELECT CONVERT(sysname,SERVERPROPERTY('servername'));
Stefan Steiger,2015年

1
@Steam:可能是因为它是默认实例。
Stefan Steiger 2015年

10

SELECT @@servername 将为您提供数据 server/instanceName

要仅获取,instanceName您应该运行select @@ServiceNamequery。


首先,您以错误的方式使用了斜线。正确的形式是“服务器\实例”。其次,@@ servername不会同时为您提供服务器和实例,因为当只有一个实例时,它只会返回“ server”。
罗比诺

8

我找到了这个:

EXECUTE xp_regread
        @rootkey = 'HKEY_LOCAL_MACHINE',
        @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
        @value_name = 'InstalledInstances'

这将为您提供服务器中安装的所有实例的列表。


该函数的ServerName属性SERVERPROPERTY@@SERVERNAME返回相似的信息。该ServerName属性提供Windows服务器和实例名称,它们共同构成唯一的服务器实例。@@SERVERNAME提供当前配置的本地服务器名称。

Microsoft当前服务器的示例是:

SELECT CONVERT(sysname, SERVERPROPERTY('servername'));

当Windows服务器上安装了多个SQL Server实例,并且客户端必须打开另一个连接到当前连接所使用的同一实例时,此方案非常有用。


SELECT CONVERT(系统名称,SERVERPROPERTY('服务器名称')); 是正确的答案
Stefan Steiger,2015年

8

为什么只停止实例名称?您可以通过以下方式清点SQL Server环境:

SELECT  
    SERVERPROPERTY('ServerName') AS ServerName,  
    SERVERPROPERTY('MachineName') AS MachineName,
    CASE 
        WHEN  SERVERPROPERTY('InstanceName') IS NULL THEN ''
        ELSE SERVERPROPERTY('InstanceName')
    END AS InstanceName,
    '' as Port, --need to update to strip from Servername. Note: Assumes Registered Server is named with Port
    SUBSTRING ( (SELECT @@VERSION),1, CHARINDEX('-',(SELECT @@VERSION))-1 ) as ProductName,
    SERVERPROPERTY('ProductVersion') AS ProductVersion,  
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ProductMajorVersion') AS ProductMajorVersion,
    SERVERPROPERTY('ProductMinorVersion') AS ProductMinorVersion,
    SERVERPROPERTY('ProductBuild') AS ProductBuild,
    SERVERPROPERTY('Edition') AS Edition,
    CASE SERVERPROPERTY('EngineEdition')
        WHEN 1 THEN 'PERSONAL'
        WHEN 2 THEN 'STANDARD'
        WHEN 3 THEN 'ENTERPRISE'
        WHEN 4 THEN 'EXPRESS'
        WHEN 5 THEN 'SQL DATABASE'
        WHEN 6 THEN 'SQL DATAWAREHOUSE'
    END AS EngineEdition,  
    CASE SERVERPROPERTY('IsHadrEnabled')
        WHEN 0 THEN 'The Always On Availability Groups feature is disabled'
        WHEN 1 THEN 'The Always On Availability Groups feature is enabled'
        ELSE 'Not applicable'
    END AS HadrEnabled,
    CASE SERVERPROPERTY('HadrManagerStatus')
        WHEN 0 THEN 'Not started, pending communication'
        WHEN 1 THEN 'Started and running'
        WHEN 2 THEN 'Not started and failed'
        ELSE 'Not applicable'
    END AS HadrManagerStatus,
    CASE SERVERPROPERTY('IsSingleUser') WHEN 0 THEN 'No' ELSE 'Yes' END AS InSingleUserMode,
    CASE SERVERPROPERTY('IsClustered')
        WHEN 1 THEN 'Clustered'
        WHEN 0 THEN 'Not Clustered'
        ELSE 'Not applicable'
    END AS IsClustered,
    '' as ServerEnvironment,
    '' as ServerStatus,
    '' as Comments

1
Nate Good Stuff Nate,我有一个类似的更增强的Inventory脚本在做同样的事情。请通过电子邮件与我联系,以获取副本...该线程的脚本可能不在重点。
汉克·弗里曼


1

只是为了向注册表查询添加一些说明。它们仅列出当前实例的匹配位数(32或64)的实例。

64位操作系统上32位SQL实例的实际注册表项为:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

您可以在64位实例上进行查询,以获取所有32位实例。32位实例似乎仅限于Wow6432Node,因此无法读取64位注册表树。


0

查找实例名称的另一种方法-右键单击“数据库名称”并选择“属性”,在此部分中,您可以在左下角看到视图连接属性,单击,然后您可以看到实例名称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.