Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Alter Tipo di dati della colonna con chiave primaria

Devi specificare NOT NULL esplicitamente in un ALTER TABLE ... ALTER COLUMN altrimenti per impostazione predefinita consente NULL . Ciò non è consentito in una colonna PK.

Quanto segue funziona bene.

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

quando il NOT NULL viene omesso dà il seguente errore

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.

Un paio di cose da considerare nel tuo approccio programmatico sono che lo faresti è necessario eliminare qualsiasi chiave esterna che faccia riferimento a ReferenceID colonne temporaneamente e assicurati anche di non includere il NOT NULL per (non PK) ReferenceID colonne che attualmente sono nullable.