Benutzer mit den meisten Antworten
Ergebnis einer Abfrage der DB1 in einer Tabelle der DB2 aktualisieren

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
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- Als Antwort vorgeschlagen Falk Krahl Montag, 8. August 2011 12:07
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 12. August 2011 20:58
-
... 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- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 11. August 2011 17:01
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 12. August 2011 20:58
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- Als Antwort vorgeschlagen Falk Krahl Montag, 8. August 2011 12:07
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 12. August 2011 20:58
-
... 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- Als Antwort vorgeschlagen Stefan FalzModerator Donnerstag, 11. August 2011 17:01
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 12. August 2011 20:58