Wir haben nur SQL server Standard Edition, also keinen Zugriff auf Snapshot-functionalität. Optionen?

Wir haben nur SQL Servre Standard Edition, damit ich die Snapshot-functionalität nicht nutzen kann. Bevor du die time verbringst, willst du nur wissen, ob das Folgende möglich ist (oder wenn es einen besseren path gibt) bitte:

Am Ende eines jeden Monats muss ich einen Schnappschuss des Monats machen und ihn in der Tabelle b speichern. Im folgenden Monat nehme ich einen weiteren Schnappschuss und füge an, dass die Schnappschuss-data auf die Tabelle b. Und so weiter….

Ist es möglich, eine gespeicherte Prozedur zu erstellen, die am Ende eines jeden Monats ausgeführt wird, der die Schnappschuss-data in eine Temp-Tabelle A speichert. Dann verwenden Sie eine andere gespeicherte Prozedur, nehmen Sie data aus der Temp-Tabelle A und fügen Sie an Tabelle B? Die zweite Prozedur kann eine Tropftabelle A haben.

Prost.

Ja, es ist möglich.

Wenn ich dich verstehe, mehr oder weniger, das ist, was du willst

  • Sperre den Tisch
  • Wähle alles in einen Staging-Tisch
  • Bewege alles von dieser Staging-Tabelle in dein Ziel

Sie können die gesamte Tabelle sperren (dies verhindert Änderungen, kann aber zu Deadlocks führen).

 INSERT INTO stagingTable ( ... -- field list ) SELECT ... -- field list FROM myTable WITH (TABLOCK) ; 

TABLOCK wird eine gemeinsame Sperre für die Tabelle platzieren, die bei der Ausführung der statement freigegeben wird ( READ COMMITTED Isolationsebene) oder nach der SERIALIZABLE der Transaktion ( SERIALIZABLE ).

Wenn du die Sperre während der gesamten Transaktion behalten möchtest, kannst du auch den HOLDLOCK Hinweis hinzufügen, der die Isolationsstufe für das object serialisierbar macht, so dass die Sperre nach COMMIT freigegeben wird. Vergessen Sie nicht, eine Transaktion zu starten und sie zurückzusetzen.

Sie können auch TABLOCKX , was eine exklusive Sperre ist, die verhindert, dass alle processe eine Sperre auf dem Tisch oder auf irgendwelchen auf niedrigeren Ebenen (Seiten, Zeilen usw.) in der Tabelle erwerben. Dies verhindert auch gleichzeitige Lesungen!

Sie können dem SQL server erlauben, zu entscheiden, welche Sperre es verwenden möchte (aka weglassen den Hinweis), in diesem Fall kann SQL server wählen, um mehr granulare Sperren (wie z. B. Seiten- oder Zeilensperren) zu verwenden, anstatt die gesamte Tabelle zu sperren.