sp_rename (Transact-SQL)
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 un type CLR (Common Language Runtime) Microsoft .NET Framework défini par l'utilisateur.
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 ; supprimez plutôt l'objet et recréez-le avec le nouveau nom. |
Conventions de la syntaxe Transact-SQL
Syntaxe
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Arguments
[ @objname = ] 'object_name'
Nom actuel, complet ou non, de l'objet utilisateur ou du type de données. Si l'objet à renommer est une colonne de table, object_name doit se présenter sous la forme table.column ou schema.table.column. Si l'objet à renommer est un index, object_name doit se présenter sous la forme table.index ou schema.table.index. Si l'objet à renommer est une contrainte, object_name doit se présenter sous la forme 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 de type nvarchar(776) et n'a pas de 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 suivre les règles qui s'appliquent aux identificateurs. newname est de type sysname, sans valeur par défaut.[!REMARQUE]
Les noms de déclencheurs ne peuvent pas commencer par # ou par ##.
[ @objtype = ] 'object_type'
Type d'objet renommé. object_type est de type varchar(13), avec NULL comme valeur par défaut et peut prendre 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
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
Types CLR définis par l'utilisateur ajoutés en exécutant CREATE TYPE ou sp_addtype.
Valeurs des codes de retour
0 (réussite) ou un nombre non nul (échec)
Notes
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. Il est impossible de modifier les noms de la plupart des types de données système et des objets système.
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, cette dernière est également renommée automatiquement par sp_rename.
sp_rename peut être utilisé pour renommer des index XML primaires et secondaires.
Le fait de renommer une procédure stockée, une fonction, une vue ou un déclencheur ne modifie pas le nom de l'objet correspondant dans la colonne definition de l'affichage catalogue sys.sql_modules. Par conséquent, il est déconseillé d'utiliser sp_rename pour renommer ces types d'objets. Supprimez, puis recréez plutôt l'objet avec son nouveau nom.
Le fait de renommer 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.
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, vous devez être membre des rôles serveur fixes sysadmin ou dbcreator .
Exemples
A. Modification du nom d'une table
L'exemple suivant renomme la table SalesTerritory en SalesTerr dans le schéma Sales.
USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. Modification du nom d'une colonne
L'exemple suivant renomme la colonne TerritoryID de la table SalesTerritory en TerrID.
USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. Modification du nom d'un index
L'exemple suivant renomme l'index IX_ProductVendor_VendorID en IX_VendorID.
USE AdventureWorks2012;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. Modification du nom d'un type de données d'alias
L'exemple suivant renomme le type de données d'alias Phone en Telephone.
USE AdventureWorks2012;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
E. Modification du nom de 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 AdventureWorks2012;
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.
sp_rename 'HumanResources.PK_Employee_BusinessEntityID', 'PK_EmployeeID';
GO
-- Rename a check constraint.
sp_rename 'HumanResources.CK_Employee_BirthDate', 'CK_BirthDate';
GO
-- Rename a foreign key constraint.
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');
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. Modification du nom de statistiques
L'exemple suivant crée un objet de statistiques nommé contactMail1 et renomme la statistique en NewContact. Lorsque vous renommez des statistiques, l'objet doit être spécifié en respectant le format schema.table.statistics_name.
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';
Voir aussi
Référence
sys.sql_expression_dependencies (Transact-SQL)
sys.sql_modules (Transact-SQL)
Procédures stockées système (Transact-SQL)
Procédures stockées du moteur de base de données (Transact-SQL)