Compartilhar via


sp_rename (Transact-SQL)

Altera o nome de um objeto criado pelo usuário no banco de dados atual. Esse objeto pode ser uma tabela, índice, coluna, tipo de dados de alias ou tipo de dados CLR definido pelo usuário do Microsoft .NET Framework Common Language Runtime.

Observação sobre cuidadosCuidado

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.

Ícone de vínculo de tópico Convenções de sintaxe Transact-SQL

Sintaxe

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

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, o object_name deverá estar no formulário table.column ou schema.table.column. Se o objeto a ser renomeado for um índice, o 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 única parte e seguir as regras para identificadores. newname é sysname, sem padrão.

    ObservaçãoObservaçã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 ter um destes 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 controlado 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

    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 de dados CLR definido pelo usuário adicionado pela execução de CREATE TYPE ou sp_addtype.

Valores de código de retorno

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

Comentários

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.

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 por sp_rename.

sp_rename pode ser usado para renomear índices XML primários e secundários.

Renomear um procedimento armazenado, função, exibição ou gatilho não alterará o nome do objeto correspondente na coluna definition da exibição de catálogo sys.sql_modules. 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.

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.

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. A renomeação de um banco de dados exige a associação 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 coluna TerritoryID na tabela SalesTerritory 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ísticas chamado contactMail1 e, depois, renomeia a estatística como 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';

Consulte também

Referência

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)