Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Renomear uma chave primária no SQL Server (T-SQL)


No SQL Server, você pode usar o sp_rename procedimento armazenado para renomear um objeto criado pelo usuário no banco de dados atual, incluindo uma chave primária.

Isso pode ser útil se você tiver uma chave primária que teve seu nome atribuído automaticamente e agora deseja dar a ela um nome mais legível.

Quando você cria uma chave primária sem fornecer explicitamente um nome para ela, o SQL Server delega automaticamente um nome para ela. Esses nomes geralmente incluem um sufixo numérico longo, o que dificulta a memorização. Se você precisar se referir a essa chave primária (por exemplo, em seu código, documentação etc.), esses nomes podem dificultar sua vida. Felizmente, sp_rename fornece uma maneira rápida e fácil de alterar esse nome.

Sintaxe


A sintaxe para sp_rename fica assim:
sp_rename 
    [ @objname = ] 'object_name' ,
    [ @newname = ] 'new_name'
    [ , [ @objtype = ] 'object_type' ]

Para chaves primárias (e outras restrições), o tipo de objeto é OBJECT .

Exemplo


Primeiro, vamos obter o nome da chave primária que queremos alterar:
SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Resultado:
 +--------------+--------------------------+
 | SchemaName   | PrimaryKey               |
 |--------------+--------------------------|
 | dbo          | PK__t1__3213663B10938530 |
 +--------------+--------------------------+ 

Esta é a chave primária para a tabela chamada t1 , então vamos em frente e renomear essa chave primária.

Ao renomear uma chave primária, você precisa incluir o esquema com o nome atual.

Exemplo:
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1';

Ao renomear uma chave primária (ou qualquer outro objeto) no SQL Server, você provavelmente verá a seguinte mensagem:
Caution: Changing any part of an object name could break scripts and stored procedures.

Isso está basicamente nos alertando de que quaisquer scripts e/ou procedimentos armazenados que fazem referência ao objeto podem agora ser interrompidos e devem ser atualizados de acordo para refletir o novo nome.

Independentemente disso, a chave primária agora foi renomeada.

Podemos verificar isso executando a consulta anterior novamente:
SELECT 
    SCHEMA_NAME(schema_id) AS SchemaName, 
    name AS PrimaryKey
FROM sys.objects  
WHERE parent_object_id = (OBJECT_ID('dbo.t1'))   
AND type = 'PK';

Resultado:
 +--------------+--------------+
 | SchemaName   | PrimaryKey   |
 |--------------+--------------|
 | dbo          | PK_t1        |
 +--------------+--------------+ 

Incluindo o tipo de objeto


Você também pode incluir o tipo de objeto como um terceiro argumento. Para chaves primárias e outras restrições, use OBJECT :
EXEC sp_rename 'dbo.PK__t1__3213663B10938530', 'PK_t1', 'OBJECT';

Incluindo os nomes dos parâmetros


Como em qualquer procedimento armazenado, você também pode incluir os nomes dos parâmetros ao chamar sp_rename :
EXEC sp_rename 
    @objname = 'dbo.PK__t1__3213663B10938530',
    @newname = 'PK_t1',
    @objtype = 'OBJECT';

Isso faz exatamente a mesma coisa (renomeia a chave primária especificada).