sp_rename (Transact-SQL)
Consente di modificare il nome di un oggetto creato dall'utente nel database corrente. Questo oggetto può essere una tabella, un indice, una colonna, un tipo di dati alias oppure un tipo Microsoft .NET Framework Common Language Runtime (CLR) definito dall'utente.
Attenzione |
---|
La modifica di una parte del nome di un oggetto potrebbe compromettere il funzionamento di script e stored procedure. È consigliabile evitare di utilizzare questa istruzione per rinominare stored procedure, trigger, funzioni definite dall'utente o viste. In alternativa, eliminare l'oggetto e ricrearlo con il nuovo nome. |
Convenzioni della sintassi Transact-SQL
Sintassi
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Argomenti
[ @objname = ] 'object_name'
Nome corrente completo o non qualificato dell'oggetto utente o del tipo di dati. Se l'oggetto da rinominare è una colonna di una tabella, object_name deve essere specificato nel formato table.column o schema.table.column. Se l'oggetto da rinominare è un indice, object_name deve essere specificato nel formato table.index o schema.table.index. Se l'oggetto da rinominare è un vincolo, object_name deve essere specificato nel formato schema.constraint.Le virgolette sono necessarie solo se viene specificato un nome di oggetto completo. Nel caso di un nome completo, ovvero contenente un nome di database, il nome del database deve corrispondere a quello del database corrente. object_name è di tipo nvarchar(776) e non prevede alcun valore predefinito.
[ @newname = ] 'new_name'
Nuovo nome dell'oggetto specificato. new_name deve essere un nome composto da una sola parte conforme alle regole per gli identificatori. newname è di tipo sysname e non prevede alcun valore predefinito.[!NOTA]
I nomi di trigger non possono iniziare con # o ##.
[ @objtype = ] 'object_type'
Tipo dell'oggetto da rinominare. object_type è di tipo varchar(13) e il valore predefinito è NULL. I valori possibili sono i seguenti.Valore
Descrizione
COLUMN
Colonna da rinominare.
DATABASE
Database definito dall'utente. Quando si rinomina un database è necessario specificare questo tipo di oggetto.
INDEX
Indice definito dall'utente. Se si rinomina un indice con statistiche, vengono automaticamente rinominate anche le statistiche.
OBJECT
Elemento di un tipo registrato in sys.objects. È ad esempio possibile utilizzare OBJECT per rinominare oggetti che includono vincoli (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), tabelle utente e regole.
STATISTICS
Statistiche create in modo esplicito da un utente o in modo implicito con un indice. Se si rinominano le statistiche di un indice, viene automaticamente rinominato anche l'indice.
USERDATATYPE
Tipi CLR definiti dall'utente aggiunti tramite l'esecuzione di CREATE TYPE o sp_addtype.
Valori di codice restituiti
0 (esito positivo) o un numero diverso da zero (esito negativo)
Osservazioni
È possibile modificare il nome di un oggetto o un tipo di dati solo nel database corrente. I nomi della maggior parte dei tipi di dati e degli oggetti di sistema non sono modificabili.
sp_rename rinomina automaticamente l'indice associato ogni volta che viene rinominato un vincolo PRIMARY KEY o UNIQUE. Se un indice rinominato è associato a un vincolo PRIMARY KEY, sp_rename rinominerà automaticamente anche il vincolo PRIMARY KEY.
sp_rename può essere utilizzata per rinominare gli indici XML primari e secondari.
La ridenominazione di una stored procedure, di una funzione, di una vista o di un trigger non modificherà il nome dell'oggetto corrispondente nella colonna definition della vista del catalogo sys.sql_modules. È pertanto consigliabile evitare di utilizzare sp_rename per rinominare questi tipi di oggetto. In alternativa, eliminare e ricreare l'oggetto con il nuovo nome.
La ridenominazione di un oggetto, ad esempio una tabella o una colonna, non aggiorna automaticamente i riferimenti a tale oggetto ed è necessario modificare manualmente tutti gli oggetti che fanno riferimento all'oggetto rinominato. Se, ad esempio, si rinomina una colonna di una tabella a cui viene fatto riferimento all'interno di un trigger, è necessario modificare il trigger in base al nuovo nome della colonna. Utilizzare sys.sql_expression_dependencies per elencare le dipendenze dall'oggetto prima di rinominarlo.
Autorizzazioni
Per rinominare oggetti, colonne e indici, è necessario disporre dell'autorizzazione ALTER per l'oggetto. Per rinominare tipi definiti dall'utente, è necessario disporre dell'autorizzazione CONTROL per il tipo. Per rinominare un database, è richiesta l'appartenenza ai ruoli predefiniti del server sysadmin o dbcreator .
Esempi
A. Ridenominazione di una tabella
Nell'esempio seguente la tabella SalesTerritory viene rinominata in SalesTerr nello schema Sales.
USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. Ridenominazione di una colonna
Nell'esempio seguente la colonna TerritoryID della tabella SalesTerritory viene rinominata in TerrID.
USE AdventureWorks2012;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. Ridenominazione di un indice
Nell'esempio seguente l'indice IX_ProductVendor_VendorID viene rinominato in IX_VendorID.
USE AdventureWorks2012;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. Ridenominazione di un tipo di dati alias
Nell'esempio seguente il tipo di dati alias Phone viene rinominato in Telephone.
USE AdventureWorks2012;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
E. Ridenominazione dei vincoli
Negli esempi seguenti vengono rinominati un vincolo PRIMARY KEY, un vincolo CHECK e un vincolo FOREIGN KEY. Quando si rinomina un vincolo, è necessario specificare lo schema di appartenenza del vincolo.
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. Ridenominazione delle statistiche
Nell'esempio seguente viene creato un oggetto statistiche denominato contactMail1 e successivamente vengono rinominate le statistiche in NewContact tramite sp_rename. Quando si rinominano le statistiche, l'oggetto deve essere specificato nel formato schema.table.statistics_name.
CREATE STATISTICS ContactMail1
ON Person.Person (BusinessEntityID, EmailPromotion)
WITH SAMPLE 5 PERCENT;
sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';
Vedere anche
Riferimento
sys.sql_expression_dependencies (Transact-SQL)
sys.sql_modules (Transact-SQL)