Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Renommer une clé primaire dans SQL Server (T-SQL)

Dans SQL Server, vous pouvez utiliser le sp_rename procédure stockée pour renommer un objet créé par l'utilisateur dans la base de données actuelle, y compris une clé primaire.

Cela peut être pratique si vous avez une clé primaire dont le nom a été automatiquement attribué et que vous souhaitez maintenant lui donner un nom plus lisible.

Lorsque vous créez une clé primaire sans lui donner explicitement un nom, SQL Server lui délègue automatiquement un nom. Ces noms incluent généralement un long suffixe numérique, ce qui rend leur mémorisation plus difficile. Si vous avez besoin de vous référer à cette clé primaire (par exemple dans votre code, votre documentation, etc.), de tels noms peuvent vous rendre la vie plus difficile. Heureusement, sp_rename fournit un moyen simple et rapide de changer ce nom.

Syntaxe

La syntaxe de sp_rename va comme ceci :

sp_rename 
    [ @objname = ] 'object_name' ,
    [ @newname = ] 'new_name'
    [ , [ @objtype = ] 'object_type' ]

Pour les clés primaires (et autres contraintes), le type d'objet est OBJECT .

Exemple

Commençons par obtenir le nom de la clé primaire que nous souhaitons modifier :

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Résultat :

 +--------------+--------------------------+
 | SchemaName   | PrimaryKey               |
 |--------------+--------------------------|
 | dbo          | PK__t1__3213663B10938530 |
 +--------------+--------------------------+ 

Il s'agit de la clé primaire de la table appelée t1 , Nous allons donc renommer cette clé primaire.

Lorsque vous renommez une clé primaire, vous devez inclure le schéma avec le nom actuel.

Exemple :

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';

Lorsque vous renommez une clé primaire (ou tout autre objet) dans SQL Server, vous verrez probablement le message suivant :

Caution: Changing any part of an object name could break scripts and stored procedures.

Cela nous indique essentiellement que tous les scripts et/ou procédures stockées faisant référence à l'objet pourraient maintenant se casser et devraient être mis à jour en conséquence pour refléter le nouveau nom.

Quoi qu'il en soit, la clé primaire a maintenant été renommée.

Nous pouvons le vérifier en exécutant à nouveau la requête précédente :

SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Résultat :

 +--------------+--------------+
 | SchemaName   | PrimaryKey   |
 |--------------+--------------|
 | dbo          | PK_t1        |
 +--------------+--------------+ 

Inclure le type d'objet

Vous pouvez également inclure le type d'objet comme troisième argument. Pour les clés primaires et autres contraintes, utilisez OBJECT :

EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';

Inclure les noms des paramètres

Comme pour toute procédure stockée, vous pouvez également inclure les noms des paramètres lors de l'appel de sp_rename :

EXEC sp_rename 
    @objname = 'dbo.PK__t1__3213663B10938530',
    @newname = 'PK_t1',
    @objtype = 'OBJECT';

Cela fait exactement la même chose (renomme la clé primaire spécifiée).