In MSSQL habe ich eine Tabelle wie folgt erstellt:Wie ändert man die Länge von Varchar im zusammengesetzten Primärschlüssel?
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);
Jetzt möchte ich Spalte die Länge der ‚Daten‘ zu erhöhen, von 255 bis 4000.
Wenn ich versuche einfach:
ALTER TABLE [mytable] ALTER COLUMN data varchar(4000);
Dann bekomme ich diesen Fehler:
The object 'PK_mytable_data' is dependent on the column 'data'
Wenn ich das versuchen:
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);
Dann bekomme ich diesen Fehler:
Cannot define PRIMARY KEY constraint on nullable column in table 'mytable'
Was bin ich? Beide Spalten wurden mit NOT NULL definiert. Warum meldet MSSQL, dass diese Einschränkung nicht erneut erstellt werden kann, nachdem ich sie gelöscht habe?
Danke! Evan
Nur ein Wort der Vorsicht - das ist eine wirklich sehr schlechte Wahl für einen primären (und damit standardmäßig Clustering) Index. Der Indexeintrag kann bis zu 259 Bytes groß sein und wird in jeden einzelnen Eintrag jedes nicht gruppierten Indexes auf dieser Tabelle dupliziert, was potentiell dazu führen kann, dass die über Gut und Böse hinausgehen .... Ich würde befürworten, einen Ersatz zu verwenden 'MyTableID INT IDENTITY' in diesem Fall und machen ** das ** Ihren primären/Clustering-Schlüssel. –