none
Linked Server in einer Tabelle RRS feed

  • Frage

  • Hallo,

    ich möchte gerne das abholen von Daten von SQL Express Server von einem Hauptserver (SQL standard) automatisieren.

    Bisher habe ich die Server Links auf dem Hauptserver immer manuell mittels sp_addlinkedserver angelegt und dann die Daten, welche immer in den gleichen Tabellen auf den SQL Express Servern liegen, mittels separatem Statement abgeholt und in einer Tabelle auf dem Hauptserver abgelegt. Dies ist bereits mittels SQL Agent automatisiert.

    Ich würde dies gerne weiter verfeinern und die notwendigen Daten der SQL Express Server in einer weiteren Tabelle auf dem Hauptserver ablegen. Die Daten für die SQL Express Server, welche noch nicht angelegt sind, bekomme ich schon im Vergleich mit sys.servers ausgelesen (server, datasrc, rmtuser, ...) schaffe es aber nicht aus den Ergebnissen mittels sp_addlinkedserver automatisch einen neuen Server Link zu erzeugen.

    Hat jemand einen Tipp für mich, wie diese Daten übergeben könnte?

    Vorab besten Dank für Eure Hilfe

    Gruß

    ML

    Donnerstag, 11. Februar 2016 14:08

Antworten

  • Hallo,

    das geht nur mit dynamischen SQL. Zur Demo habe ich einfach mal sys.objects als Tabelle mit den Server-Namen verwendet, damit man es auch testen kann. Du musst also im SELECT das SQL Statement zur Anlage des Linked Servers aufbauen; im PRINT siehst Du dann das erstellte SQL:

    USE [master];
    GO
    
    DECLARE @sql NVARCHAR(4000);
    
    SET @sql = (SELECT N'EXEC master.dbo.sp_addlinkedserver @server = N''' 
                      + name + ''', @srvproduct=N''SQL Server''' + CHAR(13) AS QRY
                FROM sys.objects
                WHERE name = N'spt_values');
    
    -- Print zur Kontrolle
    PRINT @sql;
    
    -- SQL ausführen; auskommentiert
    --EXEC sp_executesql @sql;


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert ML73 Freitag, 12. Februar 2016 06:48
    Donnerstag, 11. Februar 2016 14:37

Alle Antworten

  • Hallo,

    das geht nur mit dynamischen SQL. Zur Demo habe ich einfach mal sys.objects als Tabelle mit den Server-Namen verwendet, damit man es auch testen kann. Du musst also im SELECT das SQL Statement zur Anlage des Linked Servers aufbauen; im PRINT siehst Du dann das erstellte SQL:

    USE [master];
    GO
    
    DECLARE @sql NVARCHAR(4000);
    
    SET @sql = (SELECT N'EXEC master.dbo.sp_addlinkedserver @server = N''' 
                      + name + ''', @srvproduct=N''SQL Server''' + CHAR(13) AS QRY
                FROM sys.objects
                WHERE name = N'spt_values');
    
    -- Print zur Kontrolle
    PRINT @sql;
    
    -- SQL ausführen; auskommentiert
    --EXEC sp_executesql @sql;


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    • Als Antwort markiert ML73 Freitag, 12. Februar 2016 06:48
    Donnerstag, 11. Februar 2016 14:37
  • Hallo Olaf,

    vielen Dank für den Tip. Ich denke, dass ich damit klar komme.

    Schönes Wochenende.

    Gruß

    ML

    Freitag, 12. Februar 2016 06:59