Fala pessoal, tudo bem?
Post hoje é só pra passar um script parar renomear as chaves primárias no sql server, que normalmente são criadas com um nome aleatório quando não são criadas explicitamente com um nome durante a criação da tabela, padronizando então o nome para: “PK_” + nome da tabela.
Para fazer a correção basta executar o script abaixo no contexto do banco de dados desejado.
Sugiro que faça testes antes de executar em um ambiente de produção.
DROP TABLE IF EXISTS #tab
GO
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey,
OBJECT_NAME(parent_object_id) tabela,
'EXEC sp_rename '''+ SCHEMA_NAME(schema_id) +'.' + name +''''+','+'''PK_' + OBJECT_NAME(parent_object_id) + '''' AS script
INTO #tab
FROM sys.objects
WHERE name <> 'PK_' + OBJECT_NAME(parent_object_id) + ''
AND type = 'PK'
SET NOCOUNT ON
DECLARE @script NVARCHAR(1000)
WHILE EXISTS (SELECT * FROM #tab)
BEGIN
SELECT TOP 1 @script = script FROM #tab
PRINT @script
EXEC sp_executesql @script
DELETE FROM #tab WHERE script = @script
END
Caso queira apenas verificar quais objetos serão alterados, você pode executar somente o select abaixo e verificar a coluna script, conforme imagem abaixo:
SELECT
SCHEMA_NAME(schema_id) AS SchemaName,
name AS PrimaryKey,
OBJECT_NAME(parent_object_id) tabela,
'EXEC sp_rename '''+ SCHEMA_NAME(schema_id) +'.' + name +''''+','+'''PK_' + OBJECT_NAME(parent_object_id) + '''' AS script
FROM sys.objects
WHERE name <> 'PK_' + OBJECT_NAME(parent_object_id) + ''
AND type = 'PK'
Então é isso pessoal, esse script faz parte da “saga” de sincronização dos bancos de dados de um cliente.
Abs