![]() |
Datenbank: MsSQL • Version: 2008 • Zugriff über: SQL
Einfügen einer ID Spalte trotz identity erzwingen
Hallo zusammen
ich habe eine Datenbank, die an 4 Standorte repliziert wird. Einige Tabellen nur ReadOnly für die Abonnenten, einige bidirektional. Problem ist, daß am Serverstandort Berechtigungen geändert wurden, und dadurch die Replikation für ein paar Tage nicht lief. Beim Reinitialisieren konnte nicht alle Daten von den Abonnenten zurück gewonnen werden. Nachdem die Replikation jetzt wieder sauber läuft, wollte ich jetzt per folgendem SQL die Daten aus dem Backup zurückspielen
Delphi-Quellcode:
Im lokalen Test funktionierte das einwandfrei, in den Echtdaten wird das aber durch die Replikation verhindert. Es kommt die Meldung
SET IDENTITY_INSERT db.dbo.Table ON
GO Insert into db.dbo.Table (ID, Feld1, Feld2, rowguid) select ID, Feld1, Feld2, rowguid from Backup.dbo,Table where (rowguid not in (select rowguid from db.dbo.Table )) GO SET IDENTITY_INSERT db.dbo.Table OFF Zitat:
Viele Grüße Gerd |
AW: Einfügen einer ID Spalte trotz identity erzwingen
Na, da ist ein identity range check constraint auf der Tabelle 'Table', d.h. die IDs sind in einem bestimmten Nummernbereich (z.B. > 100000000). Die IDs aus der Backuptabelle sind dann vermutlich nicht im gleichen Zahlenbereich.
Ohne den Constraint aufzuheben/erweitern wirst Du da wohl nichts machen können. Die IDs der Backuptabelle müssen nun mal da rein. |
AW: Einfügen einer ID Spalte trotz identity erzwingen
Hallo,
ja ich weiß. Frage ist aber wie ich das Band ausheble. Eine Möglichkeit wäre:
Gibt es noch eine einfachere Möglichkeit das Band auszuhebeln bzw. wie kann ich den Constraint temporär erweitern? Ich hatte gehofft, dass IDENTITY_INSERT das auch für das Band tut Wann wird eigentliche ein neues Nummernband generiert?
Grüße und Danke Gerd |
AW: Einfügen einer ID Spalte trotz identity erzwingen
Was meinst Du mit 'Band'?
So wie ich das sehe, wird die ID nicht reinpassen, egal ob Du den range check constraint kurz ausschaltest. Dann prüft er -soweit ich weiss- beim Aktivieren eben alle Werte und es knallt. Aber einen Versuch wäre es wert ('DROP CONSTRAINT'). |
AW: Einfügen einer ID Spalte trotz identity erzwingen
Mit Band meinte ich den identity range. Wenn ich ne Replikation erzeuge, bekomme ich ja ein Range_begin range_end und ein next_range_begin und next_range_end zugewiesen, z.B. 6000..7000 und 7000..8000 zugwiesen und in max_used seh ich auch noch, wo ich mich gerade befinde.
Delphi-Quellcode:
Das mit dem "Drop constraint" probier ich gleich mal aus
select t.name, s.subscriber_server, s.db_name, m.range_begin, m.range_end, m.next_range_begin, m.next_range_end, m.is_pub_range, m.max_used
from MSmerge_identity_range m INNER JOIN sysmergearticles t ON m.artid = t.artid left outer JOIN sysmergesubscriptions s ON m.subid = s.subid order by name, subscriber_server, range_begin Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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