![]() |
Datenbank: MSSQL • Zugriff über: ADO
2 Tabellen abgleichen
Hallo,
also ich versuche gerade eine Synchronisationsfunktion hinzubekommen. Nun stellt sich die Frage, ob man den Inhalt 2er in den Spalten identische Tabellen, zusammenführen kann. Denn bei einer großen Anzahl von Spalten ist es dann, denke ich aufwendig, jede einzelne Zelle von der einen Tabelle in die andere zu übertragen. Des Weiteren sollte der Zugriff zum Synchronisationszeitpunkt nur für einen User erlaubt sein - da habe ich etwas vom Erstellen einer Sprerrtabelle gelesen, wie sieht sowas aus? Dankschön Tim |
Re: 2 Tabellen abgleichne
Ich selber arbeite mit Firebird und da gäbe es m.E. eine Möglichkeit das Ganze vom Server selber erledigen zu lassen mit ungefähr folgendem SQL-Befehl (, den ich allerdings jetzt nicht getestet habe):
SQL-Code:
Erläuterung: Man kann mit einem INSERT auch mehrere Datensätze einfügen, deren Inhalt über das nachfolgend formulierte Select zugewiesen wird. Voraussetzung ist, dass das SELECT die gleichen Datentypen in der gleichen Reihenfolge liefert, wie sie vom INSERT erwartet werden. Da Du schreibst, es handelt sich um zwei gleiche Tabellen, wäre das in Deinem Fall ja erfüllt.
Insert into Tabelle_A Select * from Tabelle_B where not Exists (Select * from Tabelle_A where IDNr = Tabelle_B.IDNr)
Prüf doch mal, ob diese Sysntax auch in MSSQL zulässig ist. Zu Deiner zweiten Frage kann ich leider nichts Konkretes sagen. Man könnte natürlich eine eigene Sperrtabelle definieren, die man vor jedem INSERT oder UPDATE abfragen müsste, um zu prüfen, ob die Aktion gerade zulässig ist. |
Re: 2 Tabellen abgleichen
Danke dir, die Idee ist schonmal gut, nur müsst ich jetzt den Inhalt der aus einer Datei in einen Datasource oder eben DBGrid geladen wird, auf den Server übertragen, wie geht denn sowas wieder?
|
Re: 2 Tabellen abgleichen
Hmmm, vielleicht habe ich Dich da auch missverstanden. Ich hatte es so verstanden, dass es sich um zwei Tabellen handelt, die in der gleichen Datenbank des MSSQL-Servers liegen. :?
|
Re: 2 Tabellen abgleichen
Haben die beiden Tabellen verschiedene PK-Wertebereiche?
Könnte mit MERGE durchgeführt werden. ![]() |
Re: 2 Tabellen abgleichen
Ja, das ist wohl schon sehr in diese Richtung mit der merge Replikation, nur leider bräuchte ich wohl eine kleine Beschreibung zum pull subscription System.
Ich dachte, dass es irgendwie noch anders geht. Wie macht man denn das, wenn man die BDE benutzt, da gibt es doch auch keine automatische eingabaute Replikationsfunktion wie bei MSSQL oder? Wie sieht dass denn aus, muss ich da auch einen SQL Server auf der Client Seite haben, also um die Updates von dem DB-Server zu bekommen? |
Re: 2 Tabellen abgleichen
Du kannst das Ganze natürlich auch manuell machen. Die beiden tabellen der beiden Datenbanken Satz für Satz vergleichen.
|
Re: 2 Tabellen abgleichen
also kommt man nicht drumherum jede einzelne zelle von der einen Tabelle in die andere zu übertragen mit einer for oder while Schleife?
Kann man denn nicht wenigstens einen Teil von einem Dataset an den anderen anhängen, sodass die neu erstellten Einträge nicht Zelle für Zelle, sondern wenigstens Spalte für Spalte oder Zeile für Zeile kopiert werden? :cry: Das dauert doch bestimmt ewig... |
Re: 2 Tabellen abgleichen
Ich würde das schon Zeile für Zeile machen.
|
Re: 2 Tabellen abgleichen
:?: wie macht man dass denn?
|
Re: 2 Tabellen abgleichen
erst mal hilft ein vergleich zweier tabellen, der geht in der regel mit select. dann in dieser abhängigikeit machste entweder 'n insert (wie zuvor beschrieben) oder 'n select. auf alle fälle haste selbst dafür sorge zu tragen dass keine inkonsistenzen entstehen. mfg. Wolf
|
Re: 2 Tabellen abgleichen
Ich würde die Datenstruktur um Timestamp-Autofelder für die letzte Änderung erweitern. So kannst du gezielt die geänderten datensätze angreifen und z.B. ber Merge-Operation synchronisieren.
Wobei ich im Vorfeld, wie auch in anderen Threads von dir schon angedeutet, weitere Vorüberlegungen über den Umfang und Vorrang usw. treffen würde. |
Re: 2 Tabellen abgleichen
danke euch,
nur wie leitet man diese Merge Operation beim SQL (mittels Delphi?) ein? Also sagt ihm, dass ich jetzt ein Update brauche bzw. ich neue Daten in meiner Tabelle habe, die auf den Server sollen? @grenzgaenger: wie macht man denn einen Select, auf eine Tabelle die man aus einer Datei in ein Dataset geladen hat, wie meinst du das? |
Re: 2 Tabellen abgleichen
Merge ist eine spezielle Funktion, die INSERT/UPDATE zusammenfasst. D.h. vorhandene Datensätze werden upgedatet, neue hinzugefügt.
|
Re: 2 Tabellen abgleichen
also rufe ich anstatt
Delphi-Quellcode:
jetzt
sql.Text := 'SELECT * FROM ''tabelle'''
Delphi-Quellcode:
?
sql.Text := 'MERGE xyz in ''tabelle'''
|
Re: 2 Tabellen abgleichen
Den genauen Syntax des Merge-Befehls mußt du im MSSQL-Manual nachschlagen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz