sp_rename (Transact-SQL)
Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric
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 Microsoft
Tipo CLR (Common Language Runtime) di .NET Framework definito dall'utente.
Importante
Alcuni oggetti di sistema e la sintassi Transact-SQL non sono supportati nei pool SQL serverless in Azure Synapse Analitica, incluso questo articolo. Per altre informazioni, vedere Supporto T-SQL.
Attenzione
La modifica di una parte del nome di un oggetto potrebbe compromettere il funzionamento di script e stored procedure. È consigliabile non usare questa istruzione per rinominare stored procedure, trigger, funzioni definite dall'utente o viste. Eliminare l'oggetto e ricrearlo con il nuovo nome.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
Sintassi per sp_rename
in SQL Server e database SQL di Azure:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Sintassi per sp_rename
(anteprima) in Azure Synapse Analitica:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
, [ @objtype = ] 'COLUMN'
Sintassi per sp_rename
in Microsoft Fabric:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'OBJECT' ]
Argomenti
[ @objname = ] 'object_name'
Nome qualificato o non qualificato corrente dell'oggetto utente o del tipo di dati. Se l'oggetto da rinominare è una colonna di una tabella, object_name deve trovarsi nel formato table.column o schema.table.column. Se l'oggetto da rinominare è un indice, object_name deve trovarsi nel formato table.index o schema.table.index. Se l'oggetto da rinominare è un vincolo, object_name deve trovarsi 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 è nvarchar(776), senza impostazione predefinita.
[ @newname = ] 'new_name'
Nuovo nome per l'oggetto specificato. new_name deve essere un nome in una sola parte e deve seguire le regole per gli identificatori. newname è sysname, senza impostazione predefinita.
I nomi dei trigger non possono iniziare con # o ##.
Si applica al warehouse in Microsoft Fabric:
- I nomi degli schemi non possono contenere
/
o\
terminare con un oggetto.
. - I nomi delle tabelle non possono contenere
/
o\
terminare con un oggetto.
.
[ @objtype = ] 'object_type'
Tipo di oggetto da rinominare. object_type è varchar(13), con un 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 rilevato 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 |
Tipo CLR definito dall'utente aggiunto eseguendo CREATE TYPE o sp_addtype. |
Si applica a: Azure Synapse Analytics
- In
sp_rename
(anteprima) per Azure Synapse Analitica èCOLUMN
un valore obbligatorio che specifica che il tipo di oggetto da rinominare è una colonna e deve essere sempre incluso nell'istruzionesp_rename
. Una colonna può essere rinominata solo se non è una colonna di distribuzione.sp_rename
può essere utilizzato solo per rinominare un oggettoCOLUMN
in un oggetto utente.
Si applica a: Microsoft Fabric
- In
sp_rename
per warehouse in Microsoft FabricOBJECT
è l'unico valore supportato per @objtype. - In
sp_rename
per l'endpoint sql analitica in Microsoft Fabric èOBJECT
l'unico valore supportato per @objtype. Non è possibile rinominare le tabelle.
Valori del codice restituito
0
(esito positivo) o un numero diverso da zero (errore).
Osservazioni:
Si applica a SQL Server (tutte le versioni supportate) e database SQL di Azure:
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, anche il vincolo PRIMARY KEY viene rinominato automaticamente dasp_rename
.sp_rename
può essere usato 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 modifica il nome dell'oggetto corrispondente nella colonna di definizione della vista del catalogo sys.sql_modules o ottenuto usando la funzione predefinita OBJECT_DEFINITION . Pertanto, è consigliabile
sp_rename
non essere usato per rinominare questi tipi di oggetto. In alternativa, eliminare e ricreare l'oggetto con il nuovo nome.
Si applica a SQL Server (tutte le versioni supportate), database SQL di Azure e Azure Synapse Analitica:
La ridenominazione di un oggetto, ad esempio una tabella o una colonna, non rinomina 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.
La ridenominazione di una colonna non aggiorna automaticamente i metadati per tutti gli oggetti che SELEZIONANO tutte le colonne (usando
*
) da tale tabella. Ad esempio, se si rinomina una colonna della tabella e a tale colonna viene fatto riferimento da una visualizzazione o a una funzione non associata a uno schema che seleziona tutte le colonne (usando*
), i metadati per la visualizzazione o la funzione continuano a riflettere il nome della colonna originale. Aggiornare i metadati usando sp_refreshsqlmodule o sp_refreshview.È 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 di sistema e degli oggetti di sistema non possono essere modificati.
Se si utilizzano più di 128 caratteri per il nuovo nome, vengono usati solo i primi 128 caratteri e il resto viene troncato.
Si applica ad Azure Synapse Analitica:
- In Azure Synapse Analitica è
sp_rename
disponibile in anteprima per i pool SQL dedicati.
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, è necessaria l'appartenenza ai ruoli predefiniti del server sysadmin o dbcreator . Per rinominare una tabella libro mastro, è necessaria l'autorizzazione ALTER LEDGER.
Esempi
R. Rinominare una tabella
Nell'esempio seguente la tabella SalesTerritory
viene rinominata in SalesTerr
nello schema Sales
.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. Rinominare una colonna
Nell'esempio seguente la TerritoryID
colonna della SalesTerritory
tabella viene rinominata in TerrID
.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. Rinominare un indice
Nell'esempio seguente l'indice IX_ProductVendor_VendorID
viene rinominato in IX_VendorID
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. Rinominare un tipo di dati alias
Nell'esempio seguente il tipo di dati alias Phone
viene rinominato in Telephone
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
E. Rinominare i 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 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. Rinominare le 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;
EXEC sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';
Esempi: Azure Synapse Analitica
G. Rinominare una colonna
Nell'esempio seguente la c1
colonna della table1
tabella viene rinominata in col1
.
Nota
Questa funzionalità di Azure Synapse Analitica è ancora in anteprima per i pool SQL dedicati ed è attualmente disponibile solo per gli oggetti nello dbo
schema.
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO
H. Rinominare un oggetto
Nell'esempio seguente la tabella dbo.table1
viene rinominata dbo.table2
in , usando il OBJECT
tipo .
EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';