2017-05-22 4 views
0

Ich finde Informationen von anderen Instanzen über Verbindungsserver mit der SERVERPROPERTY. Leider bezieht sich die SERVERPROPERTY auf den Server, von dem ich jetzt die Abfrage ausführe.List Informationen über SQL Server über Verbindungsserver

Können Sie mir helfen?

Abfrage:

declare @instance_name nvarchar(50) 
declare @command nvarchar(max) 

declare instance_name_cursor cursor for 
    select name 
    from msdb.sys.servers 
    where product = 'SQL Server' 

open instance_name_cursor 

FETCH NEXT FROM instance_name_cursor INTO @instance_name 

while @@FETCH_STATUS = 0 
begin 
    select @command = 'declare @osversion nvarchar(50) 

set @osversion = (select 
case 
when windows_release = ''10.0'' then ''Windows Server 2016'' 
when windows_release = ''6.3'' then ''Windows Server 2012 R2'' 
when windows_release = ''6.2'' then ''Windows Server 2012'' 
when windows_release = ''6.1'' then ''Windows Server 2008 R2'' 
when windows_release = ''6.0'' then ''Windows Server 2008'' 
end 
from sys.dm_os_windows_info) 

insert into mydatabase.dbo.sql_server_info 

select SERVERPROPERTY (''MachineName''),SERVERPROPERTY (''ProductVersion''), 
SERVERPROPERTY (''Edition''),SERVERPROPERTY (''ProductLevel''), 
cpu_count,(physical_memory_kb /1024), 
(select maximum FROM ['[email protected]_name+'].master.sys.configurations 
where configuration_id=1544),@osversion 
from ['[email protected]_name+'].master.sys.dm_os_sys_info' 

    exec (@command) 

    FETCH NEXT FROM instance_name_cursor INTO @instance_name 
end 

CLOSE instance_name_cursor 
DEALLOCATE instance_name_cursor 

Antwort

0

Sie benötigen die SERVERPROPERTY() Funktion auf dem Verbindungsserver ausführen, die Sie OPENQUERY mit tun kann, als ein einfaches Beispiel:

SELECT MachineName 
FROM OPENQUERY([LinkedServer], 'SELECT MachineName = SERVERPROPERTY (''MachineName'')') x; 

Dann ist es nur ein Fall Sie können die Abfrage leicht anpassen, um sich damit zu befassen. Wenn Sie also den Cursor für Demonstrationsbegriffe entfernen, haben Sie unter Umständen folgende Informationen:

DECLARE @instance_name nvarchar(50) = 'LinkedServer'; 
DECLARE @command NVARCHAR(MAX); 
DECLARE @commandBase NVARCHAR(MAX) = 
    'SELECT MachineName = SERVERPROPERTY (''''MachineName''''), 
      ProductVersion = SERVERPROPERTY (''''ProductVersion''''), 
      Edition = SERVERPROPERTY (''''Edition''''), 
      ProductLevel = SERVERPROPERTY (''''ProductLevel''''), 
      Maximum = (SELECT Maximum FROM master.sys.configurations WHERE configuration_id = 1544), 
      OSVersion = CASE 
          WHEN wi.windows_release =''''10.0'''' THEN ''''Windows Server 2016'''' 
          WHEN wi.windows_release = ''''6.3'''' THEN ''''Windows Server 2012 R2'''' 
          WHEN wi.windows_release = ''''6.2'''' THEN ''''Windows Server 2012'''' 
          WHEN wi.windows_release = ''''6.1'''' THEN ''''Windows Server 2008 R2'''' 
          WHEN wi.windows_release = ''''6.0'''' THEN ''''Windows Server 2008'''' 
         END 
    FROM master.sys.dm_os_sys_info AS si 
      CROSS JOIN master.sys.dm_os_windows_info AS wi;'; 


SET @Command = CONCAT('SELECT * FROM OPENQUERY(', QUOTENAME(@instance_name), ', ''', @CommandBase, ''');'); 

INSERT mydatabase.dbo.sql_server_info (<Columns>) 
EXECUTE sp_executesql @Command; 

Dann ist es nur ein Fall von slotting dies in Ihrem Cursor.

+0

Works groß, vielen Dank! – HoP

Verwandte Themen