AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Einfügen einer ID Spalte trotz identity erzwingen
Thema durchsuchen
Ansicht
Themen-Optionen

Einfügen einer ID Spalte trotz identity erzwingen

Ein Thema von norwegen60 · begonnen am 22. Dez 2013 · letzter Beitrag vom 22. Dez 2013
Antwort Antwort
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#1

Einfügen einer ID Spalte trotz identity erzwingen

  Alt 22. Dez 2013, 03:32
Datenbank: MsSQL • Version: 2008 • Zugriff über: SQL
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:
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
Im lokalen Test funktionierte das einwandfrei, in den Echtdaten wird das aber durch die Replikation verhindert. Es kommt die Meldung
Zitat:
The insert failed. It conflicted with an identity range check constraints in database db...
Der Hintergrund ist mir klar. Gibt es trotzdem eine Möglichkeit, das Einfügen der Daten, und sei es auf dem Server, mit den Original-ID zu erzwingen. Problem ist, dass andere Daten, die auf die Original-ID Bezug nehmen, repliziert wurden. Es wäre ein ziemlicher Aufwand, alle ID's incl. Beziehungen, zu korrigieren. Bin dankbar für jede Hilfe

Viele Grüße
Gerd
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: Einfügen einer ID Spalte trotz identity erzwingen

  Alt 22. Dez 2013, 10:47
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.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#3

AW: Einfügen einer ID Spalte trotz identity erzwingen

  Alt 22. Dez 2013, 11:41
Hallo,

ja ich weiß. Frage ist aber wie ich das Band ausheble. Eine Möglichkeit wäre:
  • Replikation auf Verleger und Abonnent löschen
  • Daten einfügen
  • Replikation wieder herstellen
Die Replikation ist in 4 Teilreplikationen zerlegt da es mit einem Standort immer wieder Probleme gab wenn die Replikation zu umfangreich war. Dabei habe ich es dann gleich so aufgebaut, dass Teil 1 und 2 nur die readonly-Tabellen enthalten und die 2 anderen nach Anwendung gesplittet sind

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?
  • Klar ist, wenn Replikation komplett gelöscht und wieder erstellt wird
  • Wenn ich auf einem Abonnenten die Replikation initialisiere?
  • Wenn ich auf einem Verleger die Replikation initialisiere?
  • Wenn ich die Momentaufnahme manuell starte?
  • Wenn ich...

Grüße und Danke
Gerd

Geändert von norwegen60 (22. Dez 2013 um 11:43 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Einfügen einer ID Spalte trotz identity erzwingen

  Alt 22. Dez 2013, 13:10
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').
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#5

AW: Einfügen einer ID Spalte trotz identity erzwingen

  Alt 22. Dez 2013, 13:25
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:
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
Das mit dem "Drop constraint" probier ich gleich mal aus

Danke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz