繁体   English   中英

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

[英]How to get current instance name from T-SQL

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

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

SELECT @@servername

返回服务器名\\实例,只要这不是默认实例

SELECT @@servicename

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

这个怎么样:

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/en-us/library/ms174396.aspx

SELECT @@servername会给你数据作为server/instanceName

要仅获取instanceName您应该运行select @@ServiceName query 。

为什么只停留在实例名称上? 您可以通过以下方式清点您的 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

我找到了这个:

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

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


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

当前服务器的 Microsoft 示例是:

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

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

要获取您连接到的服务器和实例的列表:

select * from Sys.Servers

要获取连接的服务器具有的数据库列表:

SELECT * from sys.databases;

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

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

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Microsoft SQL Server

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

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

您可以使用Transact-SQL(T-SQL)获取您的服务器名称机器名称实例名称,如下所示:

SELECT @@SERVERNAME                    -- DESKTOP-OVPADTC\SQLEXPRESS
SELECT SERVERPROPERTY ('ServerName')   -- DESKTOP-OVPADTC\SQLEXPRESS

SELECT HOST_NAME()                     -- DESKTOP-OVPADTC
SELECT SERVERPROPERTY ('MachineName')  -- DESKTOP-OVPADTC

SELECT @@SERVICENAME                   -- SQLEXPRESS
SELECT SERVERPROPERTY ('InstanceName') -- SQLEXPRESS

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM