April 15, 2015 at 9:54 am
I'm writing a query to loop through each instance on a server so I can get each instances relevant information. I can't seem to get each instances sql service and sql agent service, either one or the other. Any ideas?
DECLARE @InstanceNames varchar(50), @sql varchar(2000)
DECLARE @GetInstances TABLE (Value varchar(100), InstanceNames varchar(50), Data varchar(100), ID int IDENTITY(1,1))
DECLARE @Serverinfo TABLE (ServerName varchar(50), InstanceName varchar(50), ProductVersion varchar(20), ProductLevel char(3)
, ProductEdition varchar(50), IsClustered varchar(3), IsAG varchar(3), OperatingSystem varchar(50), Ram varchar(20)
, SQLServiceAcct varchar(50), SQLAgentAcct varchar(50))
INSERT INTO @GetInstances
EXECUTE xp_regread
@rootkey = 'HKEY_LOCAL_MACHINE',
@key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
@value_name = 'InstalledInstances'
SELECT InstanceNames from @GetInstances
DECLARE curGetInfo CURSOR for
SELECT InstanceNames
FROM @GetInstances
OPEN curGetInfo
FETCH NEXT FROM curGetInfo INTO @InstanceNames
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = '
SELECT CASE WHEN SERVERPROPERTY(''IsClustered'') = 1
THEN (SELECT cluster_nodename FROM sys.dm_server_services WHERE servicename = ''SQL Server (' + @InstanceNames + ')'')
ELSE CAST(SERVERPROPERTY(''MachineName'') as varchar(50))
END ServerName
, ''' + @InstanceNames + ''' InstanceName
, CAST(SERVERPROPERTY(''ProductVersion'') as varchar(20)) ProductVersion
, CAST(SERVERPROPERTY(''ProductLevel'') as char(3)) ProductLevel
, CAST(SERVERPROPERTY(''Edition'') as varchar(50)) ProductEdition
, CASE WHEN SERVERPROPERTY(''IsClustered'') = 1
THEN ''Yes''
ELSE ''No''
END IsClustered
, CASE WHEN SERVERPROPERTY(''IsHADREnabled'') = 1
THEN ''Yes''
ELSE ''No''
END IsAG
, RIGHT(@@VERSION, LEN(@@VERSION) -3 -CHARINDEX('' ON '', @@VERSION)) OperatingSystem
, ''16.0''RAM
, (SELECT service_account FROM sys.dm_server_services WHERE servicename = ''SQL Server (' + @InstanceNames + ')'') SQLServiceAcct
, (SELECT service_account FROM sys.dm_server_services WHERE servicename = ''SQL Server Agent (' + @InstanceNames + ')'') SQLAgentAcct
FROM sys.dm_os_sys_info'
select @sql
INSERT INTO @Serverinfo
EXEC (@SQL)
FETCH NEXT FROM curGetInfo INTO @InstanceNames
END
CLOSE curGetInfo
DEALLOCATE curGetInfo
select * from @Serverinfo
There is an exception to every rule, except this one...
April 15, 2015 at 10:23 am
Quick thought, how about cmd net start and parse the output?
😎
April 15, 2015 at 11:00 am
I don't want to start anything, just trying to get info. I'd like to stay with a SQL query.
There is an exception to every rule, except this one...
April 15, 2015 at 11:05 am
SQLHeap (4/15/2015)
I don't want to start anything, just trying to get info. I'd like to stay with a SQL query.
without any parameters it only lists the services, should be easy to parse the output.
😎
April 15, 2015 at 11:19 am
That lists out the services yes, but I'm looking for the account that the SQL services are running under.
There is an exception to every rule, except this one...
April 15, 2015 at 12:43 pm
April 15, 2015 at 1:32 pm
Just ran your code on a multi instance box (10 running and 4 not running), all showing up in the results, could this be a permission issue?
😎
BTW: the services not running show up with NULLs in SQLServiceAcct and SQLAgentAcct.
April 15, 2015 at 5:57 pm
GRRRR, doesn't work for me at home either:crazy:
There is an exception to every rule, except this one...
Viewing 8 posts - 1 through 7 (of 7 total)
You must be logged in to reply to this topic. Login to reply