[英]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')
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.