En MSSQL tengo una tabla creada de esta manera:¿Cómo alterar la longitud de varchar en la clave primaria compuesta?
CREATE TABLE [mytable] (fkid int NOT NULL, data varchar(255) CONSTRAINT DF_mytable_data DEFAULT '' NOT NULL);
ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid, data);
Ahora quiero aumentar la longitud de la columna '' de datos de 255 a 4000.
Si sólo trato:
ALTER TABLE [mytable] ALTER COLUMN data varchar(4000);
Entonces me sale este error:
The object 'PK_mytable_data' is dependent on the column 'data'
Si intento esto:
ALTER TABLE [mytable] DROP CONSTRAINT PK_mytable_data;
ALTER TABLE [mytable] ALTER COLUMN data varchar(4000);
ALTER TABLE [mytable] ADD CONSTRAINT PK_mytable_data PRIMARY KEY (fkid, data);
Entonces me sale este error:
Cannot define PRIMARY KEY constraint on nullable column in table 'mytable'
¿Qué me falta? Ambas columnas se definieron con NOT NULL, entonces, ¿por qué MSSQL informa que no puede volver a crear esta restricción después de descartarla?
Gracias! Evan
Solo una palabra de advertencia: esta es realmente una mala elección para un índice primario (y por lo tanto por clúster predeterminado). La entrada del índice podría tener un tamaño de hasta 259 bytes y se duplicará en todas y cada una de las entradas de todos y cada uno de los índices no agrupados en esa tabla, lo que potencialmente aumentará la diferencia entre el bien y el mal ... Yo recomendaría utilizar un sustituto 'MyTableID INT IDENTITY' en este caso y hacer ** esa ** clave primaria/de clúster. –