sp_rename (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure sìAzure Synapse Analytics

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 o un tipo Microsoft .NET Framework CLR (Common Language Runtime) definito dall'utente.

Nota

In , sp_rename è disponibile in anteprima per i pool SQL dedicati e può essere usato solo per rinominare un Azure Synapse Analytics elemento COLUMN in un oggetto 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.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

-- Transact-SQL Syntax for sp_rename in SQL Server and Azure SQL Database
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    [ , [ @objtype = ] 'object_type' ]   
-- Transact-SQL Syntax for sp_rename (preview) in Azure Synapse Analytics
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'   
    , [ @objtype = ] 'COLUMN'   

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 nel formato table.column o schema.table.column. Se l'oggetto da rinominare è un indice, object_name deve essere nel formato table.index o schema.table.index. Se l'oggetto da rinominare è un vincolo, object_name deve essere 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), senza alcun valore predefinito.

[ @newname = ] 'new_name'
Nuovo nome dell'oggetto specificato. new_name deve essere un nome in una parte e deve seguire le regole per gli identificatori. newname è di tipo sysname, senza alcun valore predefinito.

Nota

I nomi di trigger non possono iniziare con # o ##.

[ @objtype = ] 'object_type'
Tipo dell'oggetto da rinominare. object_type è varchar(13), con valore predefinito NULL e può essere uno di questi valori.

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 monitorato 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 SI APPLICA A: SQL Server 2012 (11.x) e versioni successive e database SQL di Azure.

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 eseguendo CREATE TYPE o sp_addtype.

[ @objtype = ] 'COLUMN' Si applica a: Azure Synapse Analytics
In sp_rename (anteprima) per , COLUMN è un parametro obbligatorio che specifica che il tipo di oggetto da Azure Synapse Analytics rinominare è una colonna. È un varchar(13) senza valore predefinito e deve essere sempre incluso nell'istruzione sp_rename (anteprima). Una colonna può essere rinominata solo se è una colonna non di distribuzione.

Valori del codice restituito

0 (esito positivo) o un numero diverso da zero (esito negativo)

Commenti

Si applica SQL Server (tutte le versioni supportate) e database SQL di Azure
La stored procedure 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, quando si esegue sp_rename viene rinominato automaticamente anche il vincolo PRIMARY KEY.

Si applica SQL Server (tutte le versioni supportate) e database SQL di Azure
La stored procedure sp_rename può essere utilizzata per rinominare indici XML primari e secondari.

Si applica SQL Server (tutte le versioni supportate) e database SQL di Azure
La ridenominazione di un stored procedure, una funzione, una vista o un trigger non modifica il nome dell'oggetto corrispondente né nella colonna di definizione della vista del catalogo di sys.sql_modules né viene ottenuto usando la funzione predefinita OBJECT_DEFINITION. È pertanto consigliabile evitare di utilizzare sp_rename per rinominare questi tipi di oggetto. In alternativa, eliminare e ricreare l'oggetto con il nuovo nome.

Si applica SQL Server (tutte le versioni supportate), database SQL di Azure e Azure Synapse Analytics
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. Usare sys.sql_expression_dependencies per elencare le dipendenze dall'oggetto prima di rinominarlo.

Si applica SQL Server (tutte le versioni supportate), database SQL di Azure e Azure Synapse Analytics
È 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.

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 al ruolo predefinito del server sysadmin o dbcreator.

Esempi

R. 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 TerritoryID colonna della tabella viene SalesTerritory 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

L'esempio seguente crea un oggetto statistiche denominato contactMail1 e quindi rinomina la statistica in NewContact usando 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';  
  

Esempi: Azure Synapse Analytics

G. Ridenominazione di una colonna

Nell'esempio seguente la c1 colonna della tabella viene table1 rinominata in col1 .

Nota

Questa funzionalità è ancora in anteprima per i pool di SQL dedicati ed è attualmente disponibile solo per gli Azure Synapse Analytics oggetti nello schema dbo.

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

Vedere anche

sys.sql_expression_dependencies (Transact-SQL)
sys.sql_modules (Transact-SQL)
Stored procedure di sistema (Transact-SQL)
motore di database stored procedure (Transact-SQL)