Unsere Benutzer möchten eine QS-Datenbank aus der Produktion aktualisieren, möchten jedoch, dass zwei Tabellen (nennen wir sie T1 und T2) die ursprünglichen QA-Daten beibehalten. Also habe ich zwei Tabellen von QA (DB1) in eine temporäre QA-Datenbank (DB2) kopiert. Dann DB1 aus der Produktion aktualisiert. Nach der Aktualisierung möchte ich T1- und T2-Daten von DB2 nach DB1 überschreiben, damit sie QA-Werte vor der Aktualisierung enthalten können.
Ich habe folgendes getan:
Verwenden
select * INTO D1.dbo.T1 FROM D2.dbo.T1
Dann D1 von Prod aktualisiert
Schneiden Sie dann T1 mit dem folgenden Schritt ab:
SELECT COUNT(*) AS BeforeTruncateCount FROM T1; GO TRUNCATE TABLE T1; GO SELECT COUNT(*) AS AfterTruncateCount FROM T1; GO
Wenn ich jetzt zurückkehre, um Daten von D2.T1 nach D1.T1 zu kopieren, wird die Fehlermeldung angezeigt, dass sich bereits ein Objekt mit dem Namen T1 in der Datenbank befindet.
Soll ich den Tisch fallen lassen und kopieren?
Oder gibt es eine bessere Methode für das gesamte Verfahren?
quelle
*
Beachten Sie, dass Sie eine Feldliste angeben (und nicht verwenden ) müssen, wenn die Tabelle ein Einrückungsfeld enthält. Diese Werte können nicht einfach "kopiert" werden.IIRC mit der
SELECT <stuff> INTO <target> FROM ...
Syntax SQL Server geht immer davon aus, dass Sie die Zieltabelle von Grund auf neu erstellen möchten. Wenn die Tabelle bereits vorhanden ist, versuchen Sie esINSERT <target> SELECT <stuff> FROM ...
stattdessen.quelle
db_datareader
), verlieren Sie diese Berechtigungen, wenn Sie die Tabelle löschen.Verwenden Sie dazu am besten SSIS (Datenimport / -export). Es hat die Funktionalität, nur ausgewählte Tabellen von der Quelle zum Ziel zu übertragen. Optional können Sie das Paket sogar speichern, damit es für zukünftige / wiederholte Übertragungen wiederverwendet werden kann.
BEARBEITEN: Hinzufügen weiterer Screenshots zur Verdeutlichung.
quelle