none
Ergebnis einer Abfrage der DB1 in einer Tabelle der DB2 aktualisieren RRS feed

  • Frage

  • Hallo,

     

    hab zwei DB und möchte mit dem Ergebnis einer Abfrage der DB1 eine Tabelle der DB2 aktualisieren.

    Nur ich möchte das ohne Hilfstabellen machen, nur ich Frage mich ob das geht, bzw. wie könnte man das in einen DTS Paket integrieren könnte.

     

    lg

     

    Mittwoch, 3. August 2011 13:13

Antworten

  • Hallo,

    Wenn beide Datenbanken auf einer SQL Server Instanz sind und Du Zugriffsrechte auf beide DBs hast, kannst Du es mit einem einfachen UPDATE (bzw. INSERT) Statement machen, indem einen 3-Part-Qualifer verwendest, also den Datenbanknamen mit dazuschreibst nach dem Prinzip: [DatabaseName].[SchemaName].[TableName]. Beispiel:

    UPDATE DST
    SET Feld1 = SRC.Feld1
      ,Feld2 = SRC.Feld2
      , -- usw.
    FROM [db1].dbo.Tabelle AS SRC
       INNER JOIN
       [db2].dbo.Tabelle AS DST
         ON SRC.PKFeld = DST.PKFeld
    

    Sieh Dir auch mal den MERGE Befehl an, der bietet UPDATE + INSERT + DELETE Funktionalität in einem Statement; gibt es ab SQL Server 2008.

    Und natürlich geht das auch per SSIS Package.

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Mittwoch, 3. August 2011 13:24
  • ... und dann verwendest Du einen 4-Part-Qualifier nach dem Format: [LinkedServerName].[DatabaseName].[SchemaName].[TableName]

    Wenn die Quell Datenbank, im Beispiel DB1 alias SRC, auf dem Linked Server liegt, sieht das Statement dann so aus:

    UPDATE DST
    SET Feld1 = SRC.Feld1
     ,Feld2 = SRC.Feld2
     , -- usw.
    FROM [LinkedServerName].[db1].dbo.Tabelle AS SRC
      INNER JOIN
      [db2].dbo.Tabelle AS DST
       ON SRC.PKFeld = DST.PKFeld
    


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Donnerstag, 11. August 2011 16:06

Alle Antworten

  • Hallo,

    Wenn beide Datenbanken auf einer SQL Server Instanz sind und Du Zugriffsrechte auf beide DBs hast, kannst Du es mit einem einfachen UPDATE (bzw. INSERT) Statement machen, indem einen 3-Part-Qualifer verwendest, also den Datenbanknamen mit dazuschreibst nach dem Prinzip: [DatabaseName].[SchemaName].[TableName]. Beispiel:

    UPDATE DST
    SET Feld1 = SRC.Feld1
      ,Feld2 = SRC.Feld2
      , -- usw.
    FROM [db1].dbo.Tabelle AS SRC
       INNER JOIN
       [db2].dbo.Tabelle AS DST
         ON SRC.PKFeld = DST.PKFeld
    

    Sieh Dir auch mal den MERGE Befehl an, der bietet UPDATE + INSERT + DELETE Funktionalität in einem Statement; gibt es ab SQL Server 2008.

    Und natürlich geht das auch per SSIS Package.

     


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Mittwoch, 3. August 2011 13:24
  • Hallo,

     

    danke, wenn die andere DB auf einen anderen Server liegt, dann muß ich den als LinktServer in meinen Server wo ich die Abfrage ausführe, anlegen?

     

    lg

    Donnerstag, 11. August 2011 13:42
  • Korrekt!
     
    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP
    www.insidesql.org/blogs/cmu
     
     
    Donnerstag, 11. August 2011 13:45
  • ... und dann verwendest Du einen 4-Part-Qualifier nach dem Format: [LinkedServerName].[DatabaseName].[SchemaName].[TableName]

    Wenn die Quell Datenbank, im Beispiel DB1 alias SRC, auf dem Linked Server liegt, sieht das Statement dann so aus:

    UPDATE DST
    SET Feld1 = SRC.Feld1
     ,Feld2 = SRC.Feld2
     , -- usw.
    FROM [LinkedServerName].[db1].dbo.Tabelle AS SRC
      INNER JOIN
      [db2].dbo.Tabelle AS DST
       ON SRC.PKFeld = DST.PKFeld
    


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Donnerstag, 11. August 2011 16:06