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