7

Ich habe eine Datenbank, die unter Sql Server 2005 mit Mergereplikation ausgeführt wird. Ich möchte einige der FK-Spalten als "nicht null" ändern, da sie immer einen Wert haben sollten. SQL Server lässt mich das nicht tun, obwohl, das ist, was es sagt:Ändern der Spaltenbeschränkung null/not null = Rowguid-Replikationsfehler

  • Unable Tabelle ändern. Es ist ungültig, die Standardeinschränkung in der Rowguid-Spalte zu löschen, die von Mergereplikation verwendet wird. Die Schemaänderung ist während der Ausführung eines internen Replikationsverfahrens fehlgeschlagen. Informationen zur korrigierenden Aktion finden Sie in den anderen Fehlernachrichten , die diese Fehlermeldung begleiten. Die Transaktion wurde im Trigger beendet. Der Batch wurde abgebrochen.

ich versuche nicht, alle Beschränkungen für die rowguid Spalte zu ändern, nur auf eine andere Spalte, die als FK wirkt. Andere Spalten, die ich festlegen möchte, sind nicht null, da der Datensatz ohne diese Informationen keinen Sinn ergibt (d. H. Bei einem Kunden der Kundenname).

Fragen: Gibt es eine Möglichkeit, Spalten auf "nicht null" zu aktualisieren, ohne die Replikation zu deaktivieren und dann wieder einzuschalten? Ist dies der beste Weg dies zu tun - sollte ich stattdessen eine Beschränkung verwenden?

Antwort

8

Anscheinend ändert SSMS Änderungen an Tabellen, indem es sie ablegt und neu erstellt. Also nur benötigt, um die Änderungen mit T-SQL-Anweisung zu machen.

ALTER TABLE dbo.MyTable ALTER COLUMN MyColumn nvarchar(50) NOT NULL 
3

Sie benötigen eine Änderung Skript aus in T-SQL-Anweisungen, wie SQL Server Management Studio wird die Tabelle schauen löschen und neu erstellen, im Gegensatz zu einfach die zusätzliche Spalte hinzufügen.

Sie müssen auch die neue Spalte zu Ihren Publikationen hinzufügen.

Beachten Sie, dass das Ändern einer Spalte auf diese Weise die Leistung der Replikation beeinträchtigen kann. Abhängig von der Größe der Tabelle, die Sie ändern, kann dies dazu führen, dass viele Daten repliziert werden. Beachten Sie, dass, obwohl Ihre Tabellenänderung in einer einzigen Anweisung ausgeführt werden kann, wenn 1 Million Zeilen betroffen sind, 1 Million Aktualisierungen auf dem Abonnenten generiert werden, NICHT eine einzige Aktualisierungsanweisung, wie allgemein angenommen wird.

Die Hände auf, Ansatz eine verbesserte Leistung .......

diese Übung ausführen zu können, müssen Sie:

  1. Sichern Sie Ihre Replikationsumgebung durch Ihre gesamte Konfiguration Scripting aus.
  2. die Tabelle von Replikation entfernen bei beide Publishers/Abonnenten
  3. Fügen Sie die Spalte an jedem Publisher/Subscriber.
  4. Wenden Sie das Update lokal auf jedem Publisher/Subscriber an.
  5. Fügen Sie die Tabelle wieder in die Replikation ein.
  6. Überprüfen Sie, dass die Transaktionen Repliziert sind.
Verwandte Themen