Blog Post

View SQL Server information using Transact-SQL script

,

Recently one of our clients requested information about their SQL Server infrastructure which we manage. In order to complete this task, I’ve written the following Transact-SQL script to retrieve information about SQL Server infrastructure.

This script is compatible with SQL Server 2005 and above:

SET NOCOUNT ON;
DECLARE  @SQLServerStartupMode [int]
        ,@SQLAgentStartupMode [int]
        ,@LoadID [int]
        ,@Position [int]
        ,@LoginMode [int]
        ,@SQLServerAuditLevel [int]
        ,@SQLServerStartupType [char](12)
        ,@SQLAgentStartupType [char](12)
        ,@SQLServerServiceAccount [varchar](64)
        ,@SQLAgentServiceAccount [varchar](64)
        ,@SQLServerRegistryKeyPath [varchar](256)
        ,@SQLAgentRegistryKeyPath [varchar](256)
        ,@InstanceName [nvarchar](128) 
        ,@FullInstanceName [nvarchar](128) 
        ,@SystemInstanceName [nvarchar](128) 
        ,@ErrorLogDirectory [nvarchar](128)
        ,@Domain [nvarchar](64)
        ,@IPLine [nvarchar](256)
        ,@IpAddress [nvarchar](16)
        ,@ActiveNode [nvarchar](128)
        ,@AuthenticationMode [varchar](64)
        ,@PortNumber [varchar](8) 
        ,@PageFile [varchar](124)
        ,@ClusterNodes [nvarchar](32) 
        ,@BinariesPath [nvarchar](128) 
        ,@RegistryKeyPath [nvarchar](256) 
        ,@RegistryPath1 [nvarchar](256) 
        ,@RegistryPath2 [nvarchar](256) 
        ,@RegistryPath3 [nvarchar](256) 
        ,@SQLServerInstallationLocation [nvarchar](512)
IF OBJECT_ID('[Tempdb].[dbo].[#_IPCONFIG_OUTPUT]') IS NOT NULL 
DROP TABLE [dbo].[#_IPCONFIG_OUTPUT]
IF OBJECT_ID('[Tempdb].[dbo].[#_PAGE_FILE_DETAILS]') IS NOT NULL 
DROP TABLE [dbo].[#_PAGE_FILE_DETAILS]
IF OBJECT_ID('[Tempdb].[dbo].[#_XPMSVER]') IS NOT NULL 
DROP TABLE [dbo].[#_XPMSVER]
IF EXISTS (SELECT * FROM [tempdb].[sys].[objects] 
            WHERE [name] = '##_SERVER_CONFIG_INFO' 
            AND [type] IN (N'U'))
DROP TABLE [dbo].[##_SERVER_CONFIG_INFO]
CREATE TABLE [dbo].[#_PAGE_FILE_DETAILS] ([data] [varchar](500))
CREATE TABLE [dbo].[#_IPCONFIG_OUTPUT] ([IPConfigCommandOutput] [nvarchar](256))
CREATE TABLE [dbo].[#_XPMSVER]([IDX] [int] NULL
,[C_NAME] [varchar](100) NULL
,[INT_VALUE] [float] NULL
,[C_VALUE] [varchar](128) NULL ) ON [PRIMARY]
CREATE TABLE [dbo].[##_SERVER_CONFIG_INFO](
    [Domain] [nvarchar](64) NULL,
    [SQLServerName] [varchar](64) NULL,
    [InstanceName] [nvarchar](128) NULL,
    [ComputerNamePhysicalNetBIOS] [nvarchar](128) NULL,
    [IsClustered] [varchar](13) NULL,
    [ClusterNodes] [nvarchar](32) NULL,
    [ActiveNode] [nvarchar](128) NULL,
    [HostIPAddress] [nvarchar](16) NULL,
    [PortNumber] [varchar](8) NULL,
    [IsIntegratedSecurityOnly] [varchar](64) NULL,
    [AuditLevel] [varchar](38) NOT NULL,
    [ProductVersion] [varchar](100) NULL,
    [ProductLevel] [varchar](100) NULL,
    [ResourceVersion] [varchar](100) NULL,
    [ResourceLastUpdateDateTime] [varchar](100) NOT NULL,
    [EngineEdition] [varchar](64) NULL,
    [BuildClrVersion] [varchar](100) NOT NULL,
    [Collation] [varchar](100) NULL,
    [CollationID] [varchar](100) NULL,
    [ComparisonStyle] [varchar](100) NULL,
    [IsFullTextInstalled] [varchar](26) NULL,
    [SQLCharset] [varchar](100) NOT NULL,
    [SQLCharsetName] [varchar](100) NOT NULL,
    [SQLSortOrderID] [varchar](100) NOT NULL,
    [SQLSortOrderName] [varchar](100) NOT NULL,
    [Platform] [varchar](128) NULL,
    [FileDescription] [varchar](128) NULL,
    [WindowsVersion] [varchar](128) NULL,
    [ProcessorCount] [float] NULL,
    [ProcessorType] [varchar](128) NULL,
    [PhysicalMemory] [float] NULL,
    [ServerPageFile] [varchar](124) NULL,
    [SQLInstallationLocation] [nvarchar](512) NULL,
    [BinariesPath] [nvarchar](128) NULL,
    [ErrorLogsLocation] [nvarchar](128) NULL,
    [MSSQLServerServiceStartupUser] [varchar](64) NULL,
    [MSSQLAgentServiceStartupUser] [varchar](64) NULL,
    [MSSQLServerServiceStartupType] [char](12) NULL,
    [MSSQLAgentServiceStartupType] [char](12) NULL,
    [InstanceLastStartDate] [datetime] NULL,
    [LoadID] [int]) ON [PRIMARY]
------ Finding SQL Server and Agent Service Account Information ------
IF SERVERPROPERTY('InstanceName') IS NULL -- Default Instance
 BEGIN --default instance
    SET @SQLServerRegistryKeyPath='SYSTEM\CurrentControlSET\SERVICES\MSSQLSERVER'
    SET @SQLAgentRegistryKeyPath='SYSTEM\CurrentControlSET\SERVICES\SQLSERVERAGENT'
 END
ELSE 
 BEGIN --Named Instance
    SET @SQLServerRegistryKeyPath = 'SYSTEM\CurrentControlSET\SERVICES\MSSQL$'
    + CAST (SERVERPROPERTY('InstanceName') AS [sysname])
    SET @SQLAgentRegistryKeyPath = 'SYSTEM\CurrentControlSET\SERVICES\SQLAgent$'
    + CAST (SERVERPROPERTY('InstanceName') AS [sysname]) 
 END
EXEC [master]..[xp_regread] 'HKEY_LOCAL_MACHINE'
                            ,@SQLServerRegistryKeyPath
                            ,@value_name = 'Start'
                            ,@value = @SQLServerStartupMode OUTPUT 
EXEC [master]..[xp_regread] 'HKEY_LOCAL_MACHINE'
                            ,@SQLAgentRegistryKeyPath
                            ,@value_name = 'Start'
                            ,@value = @SQLAgentStartupMode OUTPUT 
SET @SQLServerStartupType = (SELECT 'Start Up Mode' = 
                                CASE 
                                WHEN @SQLServerStartupMode = 2 THEN 'Automatic' 
                                WHEN @SQLServerStartupMode = 3 THEN 'Manual' 
                                WHEN @SQLServerStartupMode = 4 THEN 'Disabled' 
                                END)
SET @SQLAgentStartupType = (SELECT 'Start Up Mode' = 
                                CASE 
                                WHEN @SQLAgentStartupMode = 2 THEN 'Automatic' 
                                WHEN @SQLAgentStartupMode = 3 THEN 'Manual' 
                                WHEN @SQLAgentStartupMode = 4 THEN 'Disabled' 
                                END) 
EXEC [master]..[xp_regread] 'HKEY_LOCAL_MACHINE'
                            ,@SQLServerRegistryKeyPath
                            ,@value_name = 'ObjectName'
                            ,@value = @SQLServerServiceAccount OUTPUT 
EXEC [master]..[xp_regread] 'HKEY_LOCAL_MACHINE'
                            ,@SQLAgentRegistryKeyPath
                            ,@value_name = 'ObjectName'
                            ,@value = @SQLAgentServiceAccount OUTPUT 
------ Reading registry keys for Binaries, Errorlogs location and Domain ------
SET @InstanceName = COALESCE (CONVERT([nvarchar](100)
                        , SERVERPROPERTY('InstanceName')), 'MSSQLSERVER'); 
IF @InstanceName != 'MSSQLSERVER' 
 BEGIN
    SET @InstanceName = @InstanceName 
 END
SET @FullInstanceName = COALESCE (CONVERT([nvarchar](100)
                            , SERVERPROPERTY('InstanceName')), 'MSSQLSERVER'); 
IF @FullInstanceName != 'MSSQLSERVER' 
 BEGIN 
    SET @FullInstanceName = 'MSSQL$'+ @FullInstanceName 
 END
EXEC [master]..[xp_regread]  N'HKEY_LOCAL_MACHINE'
                            ,N'Software\Microsoft\Microsoft SQL Server\Instance Names\SQL'
                            ,@InstanceName
                            ,@SystemInstanceName OUTPUT; 
SET @RegistryKeyPath = N'SYSTEM\CurrentControlSET\Services\' 
    + @FullInstanceName;
SET @RegistryPath1 = N'Software\Microsoft\Microsoft SQL Server\' 
    + @SystemInstanceName + '\MSSQLServer\Parameters'; 
SET @RegistryPath2 = N'Software\Microsoft\Microsoft SQL Server\' 
    + @SystemInstanceName + '\MSSQLServer\supersocketnetlib\TCP\IP1';
SET @RegistryPath3 = N'SYSTEM\ControlSET001\Services\Tcpip\Parameters\'; 
IF @RegistryPath1 IS NULL 
 BEGIN 
    SET @InstanceName = COALESCE(CONVERT([nvarchar](100)
                    ,SERVERPROPERTY('InstanceName')), 'MSSQLSERVER');
 END 
EXEC [master]..[xp_regread]  N'HKEY_LOCAL_MACHINE'
                            ,N'Software\Microsoft\Microsoft SQL Server\Instance Names\SQL'
                            ,@InstanceName
                            ,@SystemInstanceName OUTPUT; 
EXEC [master]..[xp_regread]  N'HKEY_LOCAL_MACHINE'
                            ,@RegistryKeyPath
                            ,@value_name = 'ImagePath'
                            ,@value = @BinariesPath OUTPUT 
EXEC [master]..[xp_regread]  N'HKEY_LOCAL_MACHINE'
                            ,@RegistryPath1
                            ,@value_name = 'SQLArg1'
                            ,@value = @ErrorLogDirectory OUTPUT 
EXEC [master]..[xp_regread]  N'HKEY_LOCAL_MACHINE'
                            ,@RegistryPath3
                            ,@value_name = 'Domain'
                            ,@value = @Domain OUTPUT 
SELECT @ClusterNodes = COALESCE(@ClusterNodes+', ' ,'') + [Nodename] 
FROM [sys].[dm_os_cluster_nodes]
IF @ClusterNodes IS NULL
 BEGIN
    SET @ClusterNodes = 'Not Clustered' 
 END
SET @InstanceName = CONVERT([varchar](25), SERVERPROPERTY('InstanceName'))
EXEC [master]..[xp_instance_regread] N'HKEY_LOCAL_MACHINE'
                                    ,N'Software\Microsoft\MSSQLServer\MSSQLServer'
                                    ,N'AuditLevel'
                                    ,@SQLServerAuditLevel OUTPUT
EXEC [master]..[xp_instance_regread] N'HKEY_LOCAL_MACHINE'
                                    ,N'SOFTWARE\Microsoft\MSSQLServer\Setup'
                                    ,N'SQLPath'
                                    ,@SQLServerInstallationLocation OUTPUT
------ Finding IP Address ------
INSERT #_IPCONFIG_OUTPUT EXEC [master]..[xp_cmdshell] 'ipconfig'
IF LEFT (CAST(SERVERPROPERTY('ProductVersion')AS [sysname]), 5) = '10.50'
 BEGIN
    SELECT @IPLine = [IPConfigCommandOutput] 
    FROM #_IPCONFIG_OUTPUT
    WHERE UPPER ([IPConfigCommandOutput]) LIKE '%IPv4 Address%'
    IF (ISNULL(@IPLine,'***') != '***')
    BEGIN
        SET @Position = CharIndex (':', @IPLine, 1);
        SET @IPAddress = RTRIM(LTRIM(SUBSTRING(@IPLine 
            ,@Position + 1 ,LEN(@IPLine) - @Position)))
    END 
END
ELSE
BEGIN
    SELECT @IPLine = [IPConfigCommandOutput] 
    FROM #_IPCONFIG_OUTPUT
    WHERE UPPER ([IPConfigCommandOutput]) LIKE '%IP Address%'
    IF (ISNULL(@IPLine,'***') != '***')
    BEGIN
        SET @Position = CharIndex (':', @IPLine, 1);
        SET @IPAddress = RTRIM(LTRIM(SUBSTRING(@IPLine
            ,@Position + 1,LEN(@IPLine) - @Position)))
    END 
END
------ Finding Port Information ------ 
IF @InstanceName IS NULL
BEGIN
    SET @RegistryKeyPath = 'Software\Microsoft\MSSQLServer\MSSQLServer\SuperSocketNetLib\Tcp\' 
END
ELSE
BEGIN
    SET @RegistryKeyPath = 'Software\Microsoft\Microsoft SQL Server\' 
                + @InstanceName + '\MSSQLServer\SuperSocketNetLib\Tcp\'
END
EXEC [master]..[xp_regread] 'HKEY_LOCAL_MACHINE'
                            ,@RegistryKeyPath
                            ,@value_name = 'tcpPort'
                            ,@value = @PortNumber OUTPUT -- Port Number
------ Finding Authentication Mode ------
EXEC [master]..[xp_instance_regread] N'HKEY_LOCAL_MACHINE'
                                    ,N'Software\Microsoft\MSSQLServer\MSSQLServer'
                                    ,@value_name = N'LoginMode' 
                                    ,@value = @LoginMode OUTPUT
SET @AuthenticationMode = (SELECT 'AuTHENtication Mode' = 
                            CASE 
                            WHEN @LoginMode = 1 THEN 'Windows Authentication' 
                            WHEN @LoginMode = 2 THEN 'Mixed Mode Authentication' 
                            END ) 
------ Finding Active Node ------
EXEC [master]..[xp_regread]  @rootkey = 'HKEY_LOCAL_MACHINE'
                            ,@RegistryKeyPath = 'SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName'
                            ,@value_name = 'ComputerName'
                            ,@value = @ActiveNode OUTPUT
INSERT INTO [#_PAGE_FILE_DETAILS] 
EXEC [master]..[xp_cmdshell] 'wmic pagefile list /format:list'
SELECT @PageFile = RTRIM(LTRIM([data])) 
FROM #_PAGE_FILE_DETAILS 
WHERE [data] LIKE 'AllocatedBaseSize%'
INSERT INTO [#_XPMSVER]
EXEC( 'master.dbo.xp_msver')
SELECT 
    UPPER(@Domain) AS [Domain]
    ,CONVERT([varchar](64),SERVERPROPERTY('ServerName')) AS [SQLServerName]
    ,@FullInstanceName AS [InstanceName]
    ,@ActiveNode AS [ComputerNamePhysicalNetBIOS]
    ,(CASE
        WHEN CONVERT([varchar](100),SERVERPROPERTY('IsClustered')) = 1 THEN 'Clustered'
        WHEN SERVERPROPERTY('IsClustered') = 0 THEN 'Not Clustered'
        WHEN SERVERPROPERTY('IsClustered') = NULL THEN 'Error'
        END) AS [IsClustered]
    ,@ClusterNodes AS [ClusterNodes]
    ,@ActiveNode AS [ActiveNode]
    ,@IPAddress AS [HostIPAddress]
    ,@PortNumber AS [PortNumber]
    ,@AuthenticationMode AS [IsIntegratedSecurityOnly]
    ,(CASE 
        WHEN @SQLServerAuditLevel = 0 THEN 'None.'
        WHEN @SQLServerAuditLevel = 1 THEN 'Successful Logins Only'
        WHEN @SQLServerAuditLevel = 2 THEN 'Failed Logins Only'
        WHEN @SQLServerAuditLevel = 3 THEN 'Both Failed and Successful Logins Only'
        ELSE 'N/A' END) AS [AuditLevel]
    ,CONVERT([varchar](100),SERVERPROPERTY('ProductVersion')) AS [ProductVersion]
    ,CONVERT([varchar](100),SERVERPROPERTY('ProductLevel')) AS [ProductLevel]
    ,ISNULL(CONVERT([varchar](100),SERVERPROPERTY('ResourceVersion'))
    ,CONVERT([varchar](100),SERVERPROPERTY('ProductVersion'))) AS [ResourceVersion]
    ,ISNULL(CONVERT([varchar](100),SERVERPROPERTY('ResourceLastUpdateDateTime')) 
        ,'Information Not Available') AS [ResourceLastUpdateDateTime]
    ,CAST (SERVERPROPERTY('Edition') as [varchar](64)) AS [EngineEdition]
    ,ISNULL(CONVERT([varchar](100),SERVERPROPERTY('BuildClrVersion')), 'NOT Applicable') AS [BuildClrVersion]
    ,CONVERT([varchar](100),SERVERPROPERTY('Collation')) AS [Collation]
    ,CONVERT([varchar](100),SERVERPROPERTY('CollationID')) AS [CollationID]
    ,CONVERT([varchar](100),SERVERPROPERTY('ComparisonStyle')) AS [ComparisonStyle]
    ,(CASE
        WHEN CONVERT([varchar](100),SERVERPROPERTY('IsFullTextInstalled')) = 1 THEN 'Full-text is installed'
        WHEN SERVERPROPERTY('IsFullTextInstalled') = 0 THEN 'Full-text is not installed'
        WHEN SERVERPROPERTY('IsFullTextInstalled') = NULL THEN 'Error'
        END) AS [IsFullTextInstalled]
    ,ISNULL (CONVERT([varchar](100), SERVERPROPERTY('SqlCharSet')), 'No Information') AS [SQLCharset]
    ,ISNULL (CONVERT([varchar](100), SERVERPROPERTY('SqlCharSetName')), 'No Information') AS [SQLCharsetName]
    ,ISNULL (CONVERT([varchar](100), SERVERPROPERTY('SqlSortOrder')), 'No Information') AS [SQLSortOrderID]
    ,ISNULL (CONVERT([varchar](100), SERVERPROPERTY('SqlSortOrderName')), 'No Information') AS [SQLSortOrderName]
    ,(SELECT C_VALUE from [#_XPMSVER] where [C_NAME] = 'Platform') as [Platform]
    ,(SELECT C_VALUE from [#_XPMSVER] where [C_NAME] = 'FileDescription' ) as [FileDescription]
    ,(SELECT C_VALUE from [#_XPMSVER] where [C_NAME] = 'WindowsVersion') as [WindowsVersion] 
    ,(SELECT INT_VALUE from [#_XPMSVER] where [C_NAME] = 'ProcessorCount') as [ProcessorCount] 
    ,(SELECT ISNULL(C_VALUE,CAST (INT_VALUE AS VARCHAR(9))) from #_XPMSVER where [C_NAME] = 'ProcessorType') as [ProcessorType] 
    ,(SELECT INT_VALUE from [#_XPMSVER] where [C_NAME] = 'PhysicalMemory') as [PhysicalMemory]
    ,@PageFile AS [ServerPageFile] 
    ,@SQLServerInstallationLocation AS [SQLInstallationLocation]
    ,@BinariesPath AS [BinariesPath] 
    ,@ErrorLogDirectory AS [ErrorLogsLocation] 
    ,@SQLServerServiceAccount AS [MSSQLServerServiceStartupUser]
    ,@SQLAgentServiceAccount AS [MSSQLAgentServiceStartupUser]
    ,@SQLServerStartupType AS [MSSQLServerServiceStartupType]
    ,@SQLAgentStartupType AS [MSSQLAgentServiceStartupType]
    ,(SELECT [login_time] FROM [master]..[sysprocesses] WHERE [spid] = 1) AS [InstanceLastStartDate]
-- Dropping temporary table
IF OBJECT_ID('[Tempdb].[dbo].[#_IPCONFIG_OUTPUT]') IS NOT NULL 
DROP TABLE [dbo].[#_IPCONFIG_OUTPUT]
IF OBJECT_ID('[Tempdb].[dbo].[#_PAGE_FILE_DETAILS]') IS NOT NULL 
DROP TABLE [dbo].[#_PAGE_FILE_DETAILS]
IF OBJECT_ID('[Tempdb].[dbo].[#_XPMSVER]') IS NOT NULL 
DROP TABLE [dbo].[#_XPMSVER]
GO

 

I hope you find it useful! :)

Rate

You rated this post out of 5. Change rating

Share

Share

Rate

You rated this post out of 5. Change rating