webentwicklung-frage-antwort-db.com.de

ALTER TABLE auf abhängige Spalte

Ich versuche, den Datentyp der Spalte eines Primärschlüssels in tinyint von int zu ändern. Diese Spalte ist ein Fremdschlüssel in anderen Tabellen. Daher erhalte ich die folgende Fehlermeldung:


Meldung 5074, Ebene 16, Status 1, Zeile 1 Das Objekt 'PK_User_tbl' lautet abhängig von der Spalte 'appId'. Meldung 5074, Ebene 16, Status 1, Zeile 1 Die Das Objekt 'FK_Details_tbl_User_tbl' hängt von der Spalte 'appId' ab. Msg 5074, Ebene 16, Status 1, Zeile 1 Das Objekt 'FK_Log_tbl_User_tbl' lautet abhängig von der Spalte 'appId'. Meldung 4922, Ebene 16, Status 9, Zeile 1 ALTER TABLE ALTER COLUMN appId ist fehlgeschlagen, weil ein oder mehrere Objekte auf .__ zugreifen. diese Spalte.


Gibt es eine andere Möglichkeit, als Abhängigkeiten zu löschen und sie neu zu erstellen?

40
Milee

Ich glaube, dass Sie zuerst die Fremdschlüsseleinschränkungen löschen müssen. Aktualisieren Sie dann alle entsprechenden Tabellen und ordnen Sie sie neu zu.

ALTER TABLE [dbo.Details_tbl] DROP CONSTRAINT [FK_Details_tbl_User_tbl];
-- Perform more appropriate alters
ALTER TABLE [dbo.Details_tbl] ADD FOREIGN KEY (FK_Details_tbl_User_tbl) 
    REFERENCES User_tbl(appId);
-- Perform all appropriate alters to bring the key constraints back

Wenn das Gedächtnis jedoch kein wirklich großes Problem ist, würde ich die Identität als INT beibehalten. Wenn Sie nicht zu 100% sicher sind, dass Ihre Schlüssel niemals über die TINYINT-Fesseln hinauswachsen. Nur ein Wort der Vorsicht :)

71
Justin Pihony

Wenn sich Ihre Einschränkung auf einen Benutzertyp bezieht, vergessen Sie nicht zu prüfen, ob es einen Default Constraint gibt, normalerweise etwas wie DF__TableName__ColumnName__6BAEFA67. Wenn ja, müssen Sie den Default Constraint wie folgt löschen:

ALTER TABLE TableName DROP CONSTRAINT [DF__TableName__ColumnName__6BAEFA67]

Weitere Informationen finden Sie in den Kommentaren des brillanten Aaron Bertrand zu dieser Antwort .

36
Serj Sagan

sie können die Einschränkung aufheben, die Sie einschränkt. Wenn die Spalte Zugriff auf andere Tabelle hat. Angenommen, eine Ansicht greift auf die Spalte zu, die Sie ändern. Dann können Sie die Spalte nur ändern, wenn Sie die Ansicht löschen. und nachdem Sie Änderungen vorgenommen haben, können Sie die Ansicht neu erstellen.

 enter image description here

0
Santosh