sp_rename (Transact-SQL)
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Azure Synapse Analytics
Altera o nome de um objeto criado pelo usuário no banco de dados atual. Esse objeto pode ser um tipo de dados table, index, column, alias ou Microsoft
.NET Framework tipo clr (common language runtime) definido pelo usuário.
Observação
No Azure Synapse Analytics, sp_rename
está em Versão Prévia para pools de SQL dedicados e só pode ser usado para renomear uma COLUNA em um objeto de usuário.
Importante
Alguns objetos do sistema e a sintaxe Transact-SQL não têm suporte em pools de SQL sem servidor no Azure Synapse Analytics, incluindo este artigo. Para obter mais informações, visite Suporte ao T-SQL.
Cuidado
A alteração de qualquer parte de um nome de objeto pode quebrar scripts e procedimentos armazenados. É recomendável não usar essa instrução para renomear procedimentos armazenados, gatilhos, funções definidas pelo usuário ou exibições; em vez disso, descarte o objeto e recrie-o com o novo nome.
Convenções de sintaxe de Transact-SQL
Sintaxe
Sintaxe para sp_rename
no banco de dados SQL Server e SQL do Azure:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
[ , [ @objtype = ] 'object_type' ]
Sintaxe para sp_rename
(versão prévia) no Azure Synapse Analytics:
sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
, [ @objtype = ] 'COLUMN'
Argumentos
[ @objname = ] 'object_name'
O nome qualificado ou não qualificado atual do objeto de usuário ou do tipo de dados. Se o objeto a ser renomeado for uma coluna em uma tabela, object_name deverá estar no formulário table.column ou schema.table.column. Se o objeto a ser renomeado for um índice, object_name deverá estar no formulário table.index ou schema.table.index. Se o objeto a ser renomeado for uma restrição, object_name deverá estar no formato schema.constraint.
As aspas serão necessárias apenas se um objeto qualificado estiver especificado. Se um nome completamente qualificado, incluindo um nome de banco de dados, for fornecido, o nome do banco de dados deverá ser o nome do banco de dados atual. object_name é nvarchar(776), sem padrão.
[ @newname = ] 'new_name'
O novo nome para o objeto especificado. new_name deve ser um nome de uma parte e deve seguir as regras para identificadores. newname é sysname, sem padrão.
Observação
Os nomes de gatilhos não podem começar com # ou ##.
[ @objtype = ] 'object_type'
O tipo de objeto que está sendo renomeado. object_type é varchar(13), com um padrão de NULL, e pode ser um desses valores.
Valor | Descrição |
---|---|
COLUMN | Uma coluna a ser renomeada. |
DATABASE | Um banco de dados definido pelo usuário. Esse tipo de objeto é necessário quando um banco de dados é renomeado. |
INDEX | Um índice definido pelo usuário. Renomear um índice com estatísticas automaticamente também renomeia as estatísticas. |
OBJECT | Um item de um tipo rastreado em sys.objects. Por exemplo, OBJECT pode ser usado para renomear objetos, inclusive restrições (CHECK, FOREIGN KEY, PRIMARY/UNIQUE KEY), tabelas de usuário e regras. |
STATISTICS | Aplica-se a: SQL Server 2012 (11.x) e posterior e Banco de Dados SQL do Azure. As estatísticas criadas explicitamente por um usuário ou criadas implicitamente com um índice. Renomear as estatísticas de um índice automaticamente também renomeia o índice. |
USERDATATYPE | Um tipo clr definido pelo usuário adicionado executando CREATE TYPE ou sp_addtype. |
[ @objtype = ] 'COLUMN'
Aplica-se ao: Azure Synapse Analytics
Em sp_rename
(versão prévia) do Azure Synapse Analytics, COLUMN é um parâmetro obrigatório que especifica que o tipo de objeto a ser renomeado é uma coluna. É um varchar(13) sem valor padrão e sempre deve ser incluído na sp_rename
instrução (versão prévia). Uma coluna só poderá ser renomeada se não for uma coluna de distribuição.
Valores do código de retorno
0 (êxito) ou um número diferente de zero (falha)
Comentários
Aplica-se a SQL Server (todas as versões com suporte) e SQL do Azure Banco de Dados:
sp_rename
renomeia automaticamente o índice associado sempre que uma restrição PRIMARY KEY ou UNIQUE é renomeada. Se um índice renomeado estiver vinculado a uma restrição PRIMARY KEY, a restrição PRIMARY KEY também será renomeada automaticamente porsp_rename
.sp_rename
pode ser usado para renomear índices XML primários e secundários.Renomear um procedimento armazenado, uma função, uma exibição ou um gatilho não alterará o nome do objeto correspondente na coluna de definição da exibição de catálogo sys.sql_modules ou obtida usando a função interna OBJECT_DEFINITION . Portanto, recomendamos que
sp_rename
não sejam usados para renomear esses tipos de objeto. Em vez disso, cancele e recrie o objeto com o nome novo.
Aplica-se a SQL Server (todas as versões com suporte), banco de dados SQL do Azure e análise de Azure Synapse:
Renomear um objeto como uma tabela ou coluna não renomeará automaticamente as referências para esse objeto. É necessário modificar manualmente todos os objetos que fazem referência ao objeto renomeado. Por exemplo, se você renomear uma coluna de tabela e aquela coluna for referenciada em um gatilho, será necessário modificar o gatilho para que ele reflita o nome novo da coluna. Use sys.sql_expression_dependencies para listar as dependências do objeto antes de renomeá-lo.
Renomear uma coluna não atualiza automaticamente os metadados de objetos que selecionem todas as colunas (usando o
*
) dessa tabela. Por exemplo, se você renomear uma coluna de tabela e essa coluna for referenciada por uma exibição ou função não associada ao esquema que SELECTs todas as colunas (usando o*
), os metadados da exibição ou função continuarão a refletir o nome da coluna original. Atualize os metadados usando sp_refreshsqlmodule ou sp_refreshview.Você só pode alterar o nome de um objeto ou tipo de dados no banco de dados atual. Os nomes da maioria dos tipos de dados do sistema e objetos do sistema não podem ser alterados.
Se você usar mais de 128 caracteres para o novo nome, somente os primeiros 128 caracteres serão usados e o restante será truncado.
Permissões
Para renomear objetos, colunas e índices, a permissão ALTER é necessária no objeto. Para renomear tipos de usuário, a permissão CONTROL é necessária no tipo. Para renomear um banco de dados, requer associação nas funções de servidor fixas sysadmin ou dbcreator. Para renomear uma tabela do razão, a permissão ALTER LEDGER é necessária.
Exemplos
a. Renomear uma tabela
O exemplo a seguir renomeia a tabela SalesTerritory
como SalesTerr
no esquema Sales
.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
B. Renomear uma coluna
O exemplo a seguir renomeia a TerritoryID
coluna na SalesTerritory
tabela como TerrID
.
USE AdventureWorks2022;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
C. Renomear um índice
O exemplo a seguir renomeia o índice IX_ProductVendor_VendorID
como IX_VendorID
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
D. Renomear um tipo de dados de alias
O exemplo a seguir renomeia o tipo de dados de alias Phone
como Telephone
.
USE AdventureWorks2022;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO
E. Renomear restrições
Os exemplos a seguir renomeiam uma restrição PRIMARY KEY, uma restrição CHECK e uma restrição FOREIGN KEY. Ao renomear uma restrição, o esquema ao qual ela pertence deve ser especificado.
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. Renomear estatísticas
O exemplo a seguir cria um objeto de estatísticas chamado contactMail1 e renomeia a estatística para NewContact usando sp_rename
. Quando você renomeia estatísticas, o objeto deve ser especificado no 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';
Exemplos: Azure Synapse Analytics
G. Renomear uma coluna
O exemplo a seguir renomeia a c1
coluna na table1
tabela como col1
.
Observação
Esse recurso do Azure Synapse Analytics ainda está em versão prévia para pools de SQL dedicados e atualmente está disponível apenas para objetos no esquema dbo.
CREATE TABLE table1 (c1 INT, c2 INT);
EXEC sp_rename 'table1.c1', 'col1', 'COLUMN';
GO