Partage via


sp_rename (Transact-SQL)

S’applique à : SQL Server base de données Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Point de terminaison analytique SQL dans Microsoft Fabric Entrepôt dans Microsoft Fabric

Modifie le nom d'un objet créé par l'utilisateur dans la base de données actuelle. Cet objet peut être une table, un index, une colonne, un type de données alias ou Microsoft

Type clR (Common Language Runtime) .NET Framework défini par l’utilisateur.

Important

Certains objets système et syntaxe Transact-SQL ne sont pas pris en charge dans les pools SQL serverless dans Azure Synapse Analytique, y compris cet article. Pour plus d’informations, consultez le support T-SQL.

Attention

La modification d'une partie du nom de l'objet peut provoquer des problèmes dans des scripts et des procédures stockées. Nous vous recommandons de ne pas utiliser cette instruction pour renommer des procédures stockées, des déclencheurs, des fonctions définies par l’utilisateur ou des vues ; à la place, supprimez l’objet et recréez-le avec le nouveau nom.

Conventions de la syntaxe Transact-SQL

Syntaxe

Syntaxe pour sp_rename SQL Server et Azure SQL Database :

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

Syntaxe pour sp_rename (préversion) dans Azure Synapse Analytique :

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

Syntaxe de sp_rename Microsoft Fabric :

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

Arguments

[ @objname = ] 'object_name'

Nom qualifié ou non qualifié actuel de l’objet utilisateur ou du type de données. Si l’objet à renommer est une colonne d’une table, object_name doit se trouver dans le formulaire table.column ou schema.table.column. Si l’objet à renommer est un index, object_name doit se trouver dans le formulaire table.index ou schema.table.index. Si l’objet à renommer est une contrainte, object_name doit se trouver dans le formulaire schema.constraint.

Les guillemets ne sont nécessaires que si un nom complet d'objet est spécifié. Si un nom qualifié complet (incluant un nom de base de données) est fourni, le nom de base de données doit être celui de la base de données active. object_name est nvarchar(776), sans valeur par défaut.

[ @newname = ] 'new_name'

Nouveau nom de l’objet spécifié. new_name doit être un nom en une seule partie et doit respecter les règles pour les identificateurs. newname est sysname, sans valeur par défaut.

Les noms de déclencheurs ne peuvent pas commencer par # ou ##.

S’applique à Warehouse dans Microsoft Fabric :

  • Les noms de schémas ne peuvent pas contenir / ou \, ou se terminer par un ..
  • Les noms de tables ne peuvent pas contenir / ou \, ou se terminer par un ..

[ @objtype = ] 'object_type'

Type d’objet renommé. object_type est varchar(13), avec une valeur par défaut NULL, et peut être l’une de ces valeurs.

Valeur Description
COLUMN Colonne à renommer.
DATABASE Base de données définie par l'utilisateur. Ce type d'objet est nécessaire pour renommer une base de données.
INDEX Index défini par l'utilisateur. Renommer un index avec des statistiques, renomme également automatiquement les statistiques.
OBJECT Élément d’un type suivi dans sys.objects. Par exemple, OBJECT peut être utilisé pour renommer des objets, y compris des contraintes (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), des tables utilisateur et des règles.
STATISTICS S’applique à : SQL Server 2012 (11.x) et versions ultérieures, et à Azure SQL Database.

Statistiques créées explicitement par un utilisateur ou créées implicitement avec un index. Renommer les statistiques d'un index renomme également automatiquement l'index.
USERDATATYPE Type CLR défini par l’utilisateur ajouté en exécutant CREATE TYPE ou sp_addtype.

S’applique à : Azure Synapse Analytics

  • Dans sp_rename (préversion) pour Azure Synapse Analytique, COLUMN est une valeur obligatoire spécifiant que le type d’objet à renommer est une colonne et doit toujours être inclus dans l’instruction sp_rename . Une colonne ne peut être renommée que si elle n’est pas une colonne de distribution. sp_rename ne peut être utilisé que pour renommer un COLUMN objet utilisateur.

S’applique à : Microsoft Fabric

  • Dans sp_rename l’entrepôt dans Microsoft Fabric, OBJECT est la seule valeur prise en charge pour @objtype.
  • Dans sp_rename le cas du point de terminaison SQL analytique dans Microsoft Fabric, OBJECT la seule valeur prise en charge pour @objtype. Les tables ne peuvent pas être renommées.

Valeurs des codes de retour

0 (réussite) ou nombre différent de zéro (échec).

Notes

S’applique à SQL Server (toutes les versions prises en charge) et Azure SQL Database :

  • sp_rename renomme automatiquement l’index associé chaque fois qu’une contrainte PRIMARY KEY ou UNIQUE est renommée. Si un index renommé est lié à une contrainte PRIMARY KEY, la contrainte PRIMARY KEY est également automatiquement renommée par sp_rename.

  • sp_rename peut être utilisé pour renommer les index XML principaux et secondaires.

  • Le changement de nom d’une procédure stockée, d’une fonction, d’une vue ou d’un déclencheur ne modifie pas le nom de l’objet correspondant dans la colonne de définition de l’affichage catalogue sys.sql_modules ou obtenu à l’aide de la fonction intégrée OBJECT_DEFINITION . Par conséquent, nous vous recommandons de sp_rename ne pas être utilisés pour renommer ces types d’objets. Supprimez, puis recréez plutôt l'objet avec son nouveau nom.

S’applique à SQL Server (toutes les versions prises en charge), Azure SQL Database et Azure Synapse Analytique :

  • Le renommage d’un objet tel qu’une table ou une colonne ne renomme pas automatiquement les références à cet objet. Vous devez modifier manuellement tout objet qui référence l'objet renommé. Par exemple, si vous renommez une colonne de table et si cette colonne est référencée dans un déclencheur, vous devez modifier le déclencheur pour refléter le nouveau nom de colonne. Utilisez sys.sql_expression_dependencies pour obtenir la liste des dépendances de l’objet avant de le renommer.

  • Le changement de nom d’une colonne ne met pas automatiquement à jour les métadonnées pour les objets qui font un SELECT sur toutes les colonnes (à l’aide de *) de cette table. Par exemple, si vous renommez une colonne de table et que cette colonne est référencée par une vue ou une fonction non liée au schéma qui effectue le SELECT sur toutes les colonnes (à l’aide de *), les métadonnées de la vue ou de la fonction continuent de refléter le nom de colonne d’origine. Actualisez les métadonnées à l’aide de sp_refreshsqlmodule ou sp_refreshview.

  • Il n'est possible de modifier le nom d'un objet ou d'un type de données que dans la base de données active. Les noms de la plupart des types de données système et des objets système ne peuvent pas être modifiés.

  • Si vous utilisez plus de 128 caractères pour le nouveau nom, seuls les 128 premiers caractères sont utilisés et le reste est tronqué.

S’applique à Azure Synapse Analytique :

  • Dans Azure Synapse Analytique, sp_rename est disponible en préversion pour les pools SQL dédiés.

autorisations

Pour renommer des objets, des colonnes et des index, il vous faut l'autorisation ALTER sur l'objet concerné. Pour renommer des types définis par l'utilisateur, il vous faut une autorisation CONTROL sur le type concerné. Pour renommer une base de données, nécessite l’appartenance aux rôles serveur fixes sysadmin ou dbcreator . Pour renommer une table de registre, l’autorisation ALTER LEDGER est requise.

Exemples

R. Renommer une table

L'exemple suivant renomme la table SalesTerritory en SalesTerr dans le schéma Sales .

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO

B. Renommer une colonne

L’exemple suivant renomme la TerritoryID colonne dans la SalesTerritory table en TerrID.

USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO

C. Renommer un index

L'exemple suivant renomme l'index IX_ProductVendor_VendorID en IX_VendorID.

USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO

D. Renommer un type de données alias

L'exemple suivant renomme le type de données d'alias Phone en Telephone.

USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO

E. Renommer des contraintes

Les exemples suivants renomment une contrainte PRIMARY KEY, une contrainte CHECK et une contrainte FOREIGN KEY. Lors de l'attribution d'un nouveau nom à une contrainte, le schéma auquel la contrainte appartient doit être spécifié.

USE AdventureWorks2022;
GO
-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO

-- Rename the primary key constraint.
EXEC sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO

-- Rename a check constraint.
EXEC sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO

-- Rename a foreign key constraint.
EXEC sp_rename 'HumanResources.FK_Employee_Person_BusinessEntityID', 'FK_EmployeeID';

-- Return the current Primary Key, Foreign Key and Check constraints for the Employee table.
SELECT name, SCHEMA_NAME(schema_id) AS schema_name, type_desc
FROM sys.objects
WHERE parent_object_id = (OBJECT_ID('HumanResources.Employee'))
AND type IN ('C','F', 'PK');
GO
name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_Person_BusinessEntityID   HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_BusinessEntityID          HumanResources     PRIMARY_KEY_CONSTRAINT
CK_Employee_BirthDate                 HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

name                                  schema_name        type_desc
------------------------------------- ------------------ ----------------------
FK_Employee_ID                        HumanResources     FOREIGN_KEY_CONSTRAINT
PK_Employee_ID                        HumanResources     PRIMARY_KEY_CONSTRAINT
CK_BirthDate                          HumanResources     CHECK_CONSTRAINT
CK_Employee_MaritalStatus             HumanResources     CHECK_CONSTRAINT
CK_Employee_HireDate                  HumanResources     CHECK_CONSTRAINT
CK_Employee_Gender                    HumanResources     CHECK_CONSTRAINT
CK_Employee_VacationHours             HumanResources     CHECK_CONSTRAINT
CK_Employee_SickLeaveHours            HumanResources     CHECK_CONSTRAINT

(7 row(s) affected)

F. Renommer des statistiques

L’exemple suivant crée un objet de statistiques nommé contactMail1 , puis renomme la statistique à NewContact l’aide sp_renamede . Lorsque vous renommez des statistiques, l’objet doit être spécifié au format « schema.table.statistics_name ».

CREATE STATISTICS ContactMail1
    ON Person.Person (BusinessEntityID, EmailPromotion)
    WITH SAMPLE 5 PERCENT;

EXEC sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';

Exemples : Azure Synapse Analytics

G. Renommer une colonne

L’exemple suivant renomme la c1 colonne dans la table1 table en col1.

Remarque

Cette fonctionnalité de Analytique Azure Synapse est toujours en préversion pour les pools SQL dédiés et est actuellement disponible uniquement pour les objets du dbo schéma.

CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO

H. Renommer un objet

L’exemple suivant renomme la table dbo.table1 dbo.table2en utilisant le OBJECT type.

EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';