sp_rename (Transact-SQL)

Aplica-se a:yes SQL Server (todas as versões com suporte) YesBanco de Dados SQL do Azure yesAzure 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 de tabela, índice, coluna, alias ou clr (common language runtime) do Microsoft .NET Framework tipo 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.

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.

Topic link iconConvenções de sintaxe do Transact-SQL

Sintaxe

-- 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'   

Argumentos

[ @objname = ] 'object_name'
É o nome atual qualificado ou não qualificado do objeto do 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 esquema.constraint do formulário.

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 do 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 do 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 a: 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 instrução sp_rename (versão prévia). Uma coluna só poderá ser renomeada se for uma coluna de não 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 Banco de Dados SQL do Azure
sp_rename renomeia automaticamente o índice associado sempre que uma restrição PRIMARY KEY ou UNIQUE é renomeada. Se um índice renomeado for vinculado a uma restrição PRIMARY KEY, a restrição PRIMARY KEY também será renomeada automaticamente através de sp_rename.

Aplica-se a SQL Server (todas as versões com suporte) e Banco de Dados SQL do Azure
sp_rename pode ser usado para renomear índices XML primários e secundários.

Aplica-se a SQL Server (todas as versões com suporte) e Banco de Dados SQL do Azure
Renomear um procedimento armazenado, função, exibição ou gatilho não alterará o nome do objeto correspondente nem na coluna de definição da exibição de catálogo sys.sql_modules ou obtida usando a função interna OBJECT_DEFINITION . Portanto, é recomendável que sp_rename não seja usado para renomear esses tipos de objetos. 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
A renomeação de um objeto, como uma tabela ou coluna, não renomeará automaticamente as referências a 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.

Aplica-se a SQL Server (todas as versões com suporte), Banco de Dados SQL do Azure e análise de Azure Synapse
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.

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, a associação é necessária nas funções de servidor fixas sysadmin ou dbcreator.

Exemplos

a. Renomeando uma tabela

O exemplo a seguir renomeia a tabela SalesTerritory como SalesTerr no esquema Sales .

USE AdventureWorks2012;  
GO  
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';  
GO  

B. Renomeando uma coluna

O exemplo a seguir renomeia a TerritoryID coluna na SalesTerritory tabela como TerrID.

USE AdventureWorks2012;  
GO  
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';  
GO  

C. Renomeando um índice

O exemplo a seguir renomeia o índice IX_ProductVendor_VendorID como IX_VendorID.

USE AdventureWorks2012;  
GO  
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';  
GO  

D. Renomeando um tipo de dados de alias

O exemplo a seguir renomeia o tipo de dados de alias Phone como Telephone.

USE AdventureWorks2012;  
GO  
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';  
GO  

E. Renomeando 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 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. Renomeando estatísticas

O exemplo a seguir cria um objeto de estatística chamado contactMail1 e renomeia a estatística para NewContact usando sp_rename. Ao renomear 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;  
  
sp_rename 'Person.Person.ContactMail1', 'NewContact','Statistics';  
  

Exemplos: Azure Synapse Analytics

G. Renomeando uma coluna

O exemplo a seguir renomeia a c1 coluna na table1 tabela para col1.

Observação

Esse recurso 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  

Consulte Também

sys.sql_expression_dependencies (Transact-SQL)
sys.sql_modules (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)
Procedimentos armazenados do Mecanismo de Banco de Dados (Transact-SQL)