Wie kann ich eine Primärschlüsseleinschränkung mithilfe der SQL-Syntax ändern?

100

Ich habe eine Tabelle, in der eine Spalte in der Primärschlüsseleinschränkung fehlt. Anstatt es über SQL Server zu bearbeiten, möchte ich es in ein Skript einfügen, um es als Teil unserer Aktualisierungsskripte hinzuzufügen.

Welche Syntax kann ich dazu verwenden? Muss ich die Schlüsselbeschränkung löschen und neu erstellen?

Jason
quelle
5
AFAIK Ja, Sie müssen die PK-Einschränkung löschen und neu erstellen. Ich erinnere mich an keinen Befehl zum Hinzufügen einer Spalte zu einer bereits vorhandenen PK / FK-Einschränkung.
Seramme

Antworten:

149

Ja. Die einzige Möglichkeit wäre, die Einschränkung mit einer Alter-Tabelle zu löschen und dann neu zu erstellen.

ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>

ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)
Darnir
quelle
11
Wenn Sie den Namen der Primärschlüsseleinschränkung nicht kennen, verwenden Sie die hier gefundene Abfrage, um ihn nachzuschlagen (oder suchen und löschen Sie alle auf einmal). http://stackoverflow.com/a/13948609/945875
Justin
Wenn es nicht klar war oder jemand anderes den gleichen Fehler macht, alter table PatientsInfo drop constraint PK__Patients__1CBB51380A338187funktioniert der Einschränkungsname hier nicht in Anführungszeichen
Maslow
1
Für diejenigen unter Ihnen, die den Namen der Einschränkung nicht kennen: ALTER TABLE db. table DROP PRIMARY KEY, ADD PRIMARY KEY ( id1, id2);
Karsten314159
20

PRIMARY KEY CONSTRAINTkann nicht geändert werden, Sie können es nur löschen und erneut erstellen. Bei großen Datenmengen kann dies zu einer langen Laufzeit und damit zur Nichtverfügbarkeit von Tabellen führen.

Oleg Dok
quelle
3

In Bezug auf die Leistung macht es keinen Sinn, nicht gruppierte Indizes zu behalten, da diese beim Löschen und Erstellen erneut aktualisiert werden. Wenn es sich um einen großen Datensatz handelt, sollten Sie in Betracht ziehen, die Tabelle umzubenennen (falls möglich, Sicherheitseinstellungen?). Wenn Sie eine leere Tabelle mit den richtigen Schlüsseln neu erstellen, werden alle Daten dorthin migriert. Sie müssen sicherstellen, dass Sie genügend Platz dafür haben.

Oky
quelle
1

In meinem Fall möchte ich einem Primärschlüssel eine Spalte hinzufügen (Spalte 4). Ich habe dieses Skript verwendet, um column4 hinzuzufügen

ALTER TABLE TableA
DROP CONSTRAINT [PK_TableA]

ALTER TABLE TableA
ADD CONSTRAINT [PK_TableA] PRIMARY KEY (
    [column1] ASC,
    [column2] ASC, 
    [column3] ASC,
    [column4] ASC
)
MNF
quelle
-4

Sie können Einschränkungsobjekte mit sp_rename umbenennen (wie in dieser Antwort beschrieben ).

beispielsweise:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint'
Garrett Taiji
quelle
3
Die Frage war, wie man die Einschränkung ändert, dh eine Spalte HINZUFÜGEN, nicht wie man sie umbenennt.
Andrew Steitz