Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Spaltendatentyp mit Primärschlüssel ändern

Sie müssen NOT NULL angeben explizit in einem ALTER TABLE ... ALTER COLUMN andernfalls erlaubt es standardmäßig NULL . Dies ist in einer PK-Spalte nicht zulässig.

Folgendes funktioniert einwandfrei.

CREATE TABLE p
(
ReferenceID VARCHAR(6) NOT NULL PRIMARY KEY
)

INSERT INTO p VALUES ('AAAAAA')

ALTER TABLE p ALTER COLUMN ReferenceID VARCHAR(8) NOT NULL

wenn NOT NULL weggelassen wird, gibt es den folgenden Fehler

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

Ein paar Dinge, die Sie bei Ihrem programmatischen Ansatz berücksichtigen sollten, sind, dass Sie würden müssen alle Fremdschlüssel löschen, die auf die ReferenceID verweisen Spalten vorübergehend und stellen Sie außerdem sicher, dass Sie NOT NULL nicht einschließen für (Nicht-PK) ReferenceID Spalten, die derzeit sind nullable.