web-dev-qa-db-fra.com

Comment changer la longueur de colonne d'une clé primaire dans SQL Server?

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>
10
LearnByReading

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)
18
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>)
3
The Reason

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"
0
Wendel