2009-04-29 4 views
0

Ich habe eine Tabelle mit einer Identitätsspalte als Primärschlüssel. Keiner der Daten in der Tabelle ist zu diesem Zeitpunkt wichtig, so dass ich alles löschen kann, aber ich möchte die Spalte von int in bigint ändern und sie möglicherweise in bigint.minvalue reseedieren, um den größtmöglichen Bereich zu geben, bevor ich nicht mehr aktiv bin Werte. Ich möchte dies tun, ohne die Replikation neu erstellen oder die Abonnenten ändern zu müssen.Was sind die richtigen Schritte zum Ändern einer PK-Spalte einer Tabelle, die eine Mergereplikationsquelle in SQL SVR 2005 ist?

Wenn ich

alter table MyTable 
    alter column MyTableId bigint not null 

ausführen bekomme ich die Fehler:

Msg 5074, Level 16, State 1, Line 5 
The object 'repl_identity_range_CEEB13F5_11D2_435C_BE5D_EBF91EBF8DE7' is dependent on column 'MyTableId'. 
Msg 5074, Level 16, State 1, Line 5 
The object 'PK_MyTable' is dependent on column 'MyTableId'. 
Msg 4922, Level 16, State 9, Line 5 
ALTER TABLE ALTER COLUMN MyTableId failed because one or more objects access this column. 

Antwort

1

Sie kann nicht einen Primärschlüssel auf einer veröffentlichten Tabelle als Teil des Systems die Daten verwendet, ändern um zu schieben; Also entferne die Tabelle aus der Veröffentlichung. Nehmen Sie die Änderungen vor und veröffentlichen Sie sie erneut.

Sie können Ihren Tisch mit sp_droparticle http://msdn.microsoft.com/en-us/library/ms173832.aspx

fallen Dann Tisch machen/Ihren Schlüssel ändert

Schließlich sp_addmergearticle verwenden, um es wieder hinzufügen in http://msdn.microsoft.com/en-us/library/ms174329.aspx

+0

sieht aus wie Sie es nicht aus dem Drop können Veröffentlichung, wenn es ein Abonnement nach dem Link für sp_droparticle gibt. Danke, obwohl. – Zack

+0

Ich habe den Artikel aus der Publikation entfernt und modifiziert. dann fügte er es zurück. Der Abonnent muss aus dem Snapshot neu initialisiert werden. – Zack

+0

Ausgezeichnet, hoffe, es ist eine kleine Datenbank mit ein paar Abonnenten :) – u07ch

Verwandte Themen