2016-05-13 5 views
0

Ich arbeite in SQL Server 2008 R2 und haben eine Produktions Tabelle, die ich genau an einem anderen Standort replizieren arbeiten müssen. Ich werde zuerst einen Job ausführen, um alles zu verschieben (einmal aus) und dann einen täglichen Job ausführen, um die Updates/Inserts täglich zu aktualisieren.Wie eine Kopie eines Datensatzes erstellen, die einen Zeitstempel Wert hat

Der tägliche Job untersucht die Produktionstabelle und sucht nach neuen Werten, die eingefügt werden müssen (basierend auf einem erstellten Datum) und findet auch alle vorhandenen Werte, die aktualisiert werden müssen (basierend auf einem geänderten Datum). Alle neuen Werte sind Inserts und alle geänderten Werte sind Updates.

Der Job zieht diese Zeilen aus dem Produktionstisch und wendet sie auf die Kopiertabelle an anderer Stelle befindet. Ich stehe mit Timestamp-Spalten in Schwierigkeiten. Die Produktionstabelle hat eine Timestamp-Spalte und ich weiß nicht, wie ich das handhaben soll, wenn ich die Kopiertabelle aktualisiere (auch als Timestamp-Spalte erstellt).

Ich erhalte eine Fehlermeldung, wenn ich die production.timestamp_col = copytable.timestamp_col gesetzt (kann nicht eine Timestamp-Spalte aktualisieren).

Sollte ich es auslassen (in dem Fall habe ich keine genaue Kopie der Tabelle), konvertieren Sie die Spalte in der Kopiertabelle & den Wert in der Auswahl aus der Produktionstabelle auf etwas anderes (nicht sicher was)), setzen Sie meinen eigenen Wert in (wieder, wird nicht eine genaue Kopie der Tabelle haben) oder ablegen/abschneiden und jedes Mal neu erstellen (ineffizient aufgrund der Datenmengen)?

Was wäre der beste Ansatz, wie dies in einer Situation sein?

Dank

+0

Um Daten auf einer geplanten Basis zu kopieren vielleicht die beste Lösung, die Replikation ist. Das für den Job, den du erwähnt hast. Jetzt für den Zeitstempel. Stellen Sie sich Timestamp als GUID für die Zeile vor. Es markiert die Zeile im gesamten Universum eindeutig ;-) Das ist der Grund, warum Sie nur eine Zeitmarkenspalte in einer Tabelle haben können. Sie können also nicht zwei Zeilen mit demselben Zeitstempelwert haben. Dies ist in einigen Replikationsszenarios hilfreich. – shadow

Antwort

0

Sie können die Zielzeitstempelspalte in varbinary(8) konvertieren und dann die Werte einfügen. Dies wird Ihnen helfen, eine exakte Kopie zu erstellen, aber es wird die Timestamp-Funktionalität brechen. Tun Sie dies, wenn Sie nur eine Kopie benötigen. Der eigentliche Zweck der Zeitstempelspalte besteht darin, Änderungen in einer Zeile durch Versionierung nachzuverfolgen.

2

In SQL ein Zeitstempel-Säulensystem erzeugt ist, können Sie es nicht auf dem Einsatz aktualisieren oder setzen. SQL macht das alles für Sie.

https://technet.microsoft.com/en-us/library/ms182776(v=sql.110).aspx

können Sie in der Lage sein, etwas mit der Replikation abziehen/Spiegelung eine 100% exakte Kopie zu bekommen, aber es kann nicht wert sein, je nach Ihren Bedürfnissen.