Partilhar via


sp_rename (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Ponto de extremidade de análises SQL no Microsoft Fabric Warehouse no Microsoft Fabric

Altera o nome de um objeto criado pelo usuário no banco de dados atual. Esse objeto pode ser uma tabela, um índice, uma coluna, um tipo de dados de alias ou um tipo de dados Microsoft

Tipo definido pelo usuário CLR (Common Language Runtime) do .NET Framework.

Importante

Não há suporte para alguns objetos do sistema e sintaxe Transact-SQL em pools de SQL sem servidor no Azure Synapse Analytics, incluindo este artigo. Para obter mais informações, visite o suporte do T-SQL.

Cuidado

A alteração de qualquer parte de um nome de objeto pode quebrar scripts e procedimentos armazenados. Recomendamos que você não use essa instrução para renomear procedimentos armazenados, gatilhos, funções definidas pelo usuário ou exibições; em vez disso, solte o objeto e recrie-o com o novo nome.

Convenções de sintaxe de Transact-SQL

Sintaxe

Sintaxe para sp_rename no SQL Server e no Banco de Dados 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'

Sintaxe para sp_rename no Microsoft Fabric:

sp_rename [ @objname = ] 'object_name' , [ @newname = ] 'new_name'
    [ , [ @objtype = ] 'OBJECT' ]

Argumentos

@objname [ = ] 'object_name'

O nome qualificado ou não qualificado atual do objeto de usuário ou 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 formato 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 do objeto especificado. new_name deve ser um nome de uma parte e deve seguir as regras para identificadores. newname é sysname, sem padrão.

Os nomes de gatilho não podem começar com # ou ##.

Aplica-se ao Warehouse no Microsoft Fabric:

  • Os nomes de esquema não podem conter / ou \ ou terminar com um ..
  • Os nomes de tabela não podem conter / ou \ ou terminar com um ..

@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.

Aplica-se ao: Azure Synapse Analytics

  • Em sp_rename (versão prévia) do Azure Synapse Analytics, COLUMN há um valor obrigatório que especifica que o tipo de objeto a ser renomeado é uma coluna e sempre deve ser incluído na sp_rename instrução. Uma coluna só poderá ser renomeada se não for uma coluna de distribuição. sp_rename só pode ser usado para renomear a COLUMN em um objeto de usuário.

Aplica-se a: Microsoft Fabric

  • In sp_rename para o Warehouse no Microsoft Fabric, OBJECT é o único valor com suporte para @objtype.
  • In sp_rename para o ponto de extremidade de análise SQL no Microsoft Fabric, OBJECT é o único valor com suporte para @objtype. As tabelas não podem ser renomeadas.

Valores do código de retorno

0 (êxito) ou um número diferente de zero (falha)

Comentários

Aplica-se ao SQL Server (todas as versões com suporte) e ao 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 estiver vinculado a uma restrição PRIMARY KEY, a restrição PRIMARY KEY também será renomeada automaticamente por sp_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 do catálogo sys.sql_modules ou obtido usando a função interna OBJECT_DEFINITION . Portanto, recomendamos que sp_rename não seja usado para renomear esses tipos de objeto. Em vez disso, cancele e recrie o objeto com o nome novo.

Aplica-se ao SQL Server (todas as versões com suporte), Banco de Dados SQL do Azure e Azure Synapse Analytics:

  • Renomear 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.

  • 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.

Aplica-se ao Azure Synapse Analytics:

  • No Azure Synapse Analytics, sp_rename está em versão prévia para pools de SQL dedicados.

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, é necessária a associação nas funções de servidor fixas sysadmin ou dbcreator. Para renomear uma tabela contábil, é necessária a permissão ALTER LEDGER.

Exemplos

R. 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 SalesTerritory coluna na tabela para 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. Restrições de renomeação

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 usando NewContact 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 table1 coluna na tabela para 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 dbo esquema.

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

H. Renomear um objeto

O exemplo a seguir renomeia a tabela dbo.table1 para dbo.table2, usando o OBJECT tipo.

EXEC sp_rename @objname = 'dbo.table1', @newname = 'table2', @objtype = 'OBJECT';