.png)
Ich verwende SQL Server 2008 Std mit einer Datenbank, die in einer „Transaktionsveröffentlichung“ für einen einzelnen Abonnenten veröffentlicht wird.
Wir können keine Änderungen an den Tabellen des Herausgebers vornehmen, ohne die Meldung „Tabelle kann nicht geändert werden, da sie zur Replikation veröffentlicht ist“ zu erhalten. Das erscheint seltsam, da Schemaänderungen (oder Skripte, die dazu ausgeführt werden) an den Abonnenten gesendet werden sollten. Derzeit müssen wir das gesamte Veröffentlichungssystem löschen, um Tabellenänderungen vorzunehmen.
Was übersehe ich? Es muss doch eine Möglichkeit geben, die Publisher-Tabellen zu aktualisieren?
Danke!
Antwort1
Die Tabellenänderung, die Sie durchführen möchten, wurde höchstwahrscheinlich im grafischen Tabellendesigner in SSMS durchgeführt. Die Implementierung von Tabellenänderungen durch den grafischen Designer ist mangelhaft.
Wenn Sie die Änderungen speichern, wird SSMS ausgeführt und kopiert die gesamte Tabelle in eine neue Tabelle mit dem neuen Design. Anschließend wird die „alte“ Tabelle gelöscht und die neue Tabelle umbenannt, um sie zu ersetzen.
Beachten Sie, dass die Spaltenreihenfolge für in SQL Server gespeicherte Tabellen kaum eine Rolle spielt. Es besteht keine Notwendigkeit, in der Mitte einer Tabelle neue Spalten hinzuzufügen, es sei denn, es sieht besser aus :=)
Da sich Ihre Tabelle in einer Transaktionsreplikation befindet, kann SSMS die Anweisung „Drop Table“ nicht im Hintergrund ausführen und Sie erhalten die von Ihnen notierte Fehlermeldung.
Um die gewünschten Änderungen vorzunehmen (eine Spalte hinzufügen oder löschen), müssen Sie die Befehle in T-SQL ausführen
ALTER TABLE dbo.Table ADD NewCol int NULL;
ALTER TABLE dbo.Table DROP COLUMN NewCol;
Bitte beachten Sie, dass die Befehlssyntax inkonsistent ist (danke, MS!). Beim Hinzufügen einer Spalte muss/darf das Schlüsselwort COLUMN nicht angegeben werden, während es beim Löschen erforderlich ist.
Solange Ihre Replikation richtig eingerichtet ist, um Schemaänderungen zu replizieren, funktionieren diese Befehle und werden an den Abonnenten weitergegeben.
Auf diese Weise können Änderungen an einer Tabelle vorgenommen werden, mit Ausnahme der Änderung des Primärschlüssels. Der PK ist für die Transaktionsreplikation erforderlich und kann nicht geändert werden. Sie müssten den Artikel aus der Replikation entfernen, wenn Sie diese Spalten ändern möchten.
Hoffentlich hilft das.