Je sais comment changer la longueur d'une colonne, mais mon instruction SQL échoue parce que la colonne que je tente de modifier est une clé PK, je reçois donc l'erreur suivante:
Msg 5074, Niveau 16, Etat 1, Ligne 1
L'objet 'PK_TableName' dépend de la colonne 'PersonID'.
PersonID = PK.
J'ai lu Quel est le SQL pour changer la longueur de champ d'une colonne de table dans le serveur SQL qui s'applique uniquement aux colonnes non-PK.
J'ai essayé ceci:
ALTER TABLE table_name
ALTER COLUMN column_name <new datatype>
Voir ci-dessous exemple d'exemple comment augmenter la taille de la colonne primaire
- créer un exemple de table
create table abc (id varchar(10) primary key)
- trouve le constratint primaire dans les tables de contraintes clés
select object_name(object_id),* from sys.key_constraints where object_name(parent_object_id) = 'abc'
- contrainte de chute
ALTER TABLE abc
DROP CONSTRAINT PK__abc__3213E83F74EAC69B
PK__abc__3213E83F74EAC69B à remplacer par le nom de contrainte dans lequel vous trouvez Dans
sys.key_constraints
table
- Ajouter non nul
ALTER TABLE abc alter column id varchar(20) NOT NULL;
- rajouter une clé primaire
ALTER TABLE abc
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (id)
ALTER TABLE <Table_Name>
DROP CONSTRAINT <constraint_name>
ALTER TABLE table_name
ALTER COLUMN column_name datatype
ALTER TABLE <Table_Name>
ADD CONSTRAINT <constraint_name> PRIMARY KEY (<Column1>,<Column2>)
SQLServer 2008 ne m'autorisant pas à modifier une clé primaire avec des données, j'ai donc désactivé toutes les contraintes, exécuté la commande et réactivé toutes les contraintes. Les commandes sont:
EXEC sp_MSforeachtable @command1="ALTER TABLE ? NOCHECK CONSTRAINT ALL"
-- commands here
EXEC sp_MSforeachtable @command1="ALTER TABLE ? CHECK CONSTRAINT ALL"