14 febbraio 2014 16:24
Cambiare nome al constraint della chiave primaria
Se si modifica il nome di una tabella alla quale abbiamo già assegnato la chiave primaria (PK, primary key) il constraint relativo a questa chiave rimarrà con il vecchio nome (es PK_oldName). E’ sufficiente usare un sp_rename per cambiarla. Con questo script possiamo cercare tutte le tabelle in cui non ci sia corrispondenza e generare i vari rename automaticamente.
WITH PKNames
AS (
SELECT name AS IndexName
,OBJECT_NAME(object_id) AS TableName
,OBJECT_SCHEMA_NAME(object_id) as SchemaName
,(SELECT '' + c.name
FROM sys.index_columns ic
INNER JOIN sys.columns c
ON ic.object_id = c.object_id
AND ic.index_column_id = c.column_id
WHERE ic.object_id = i.object_id
AND ic.index_id = i.index_id
AND ic.is_included_column = 0
ORDER BY ic.key_ordinal
FOR XML PATH('')) AS Columns
FROM sys.indexes i
WHERE i.is_primary_key = 1
)
SELECT 'EXEC sp_rename ''' + QUOTENAME(SchemaName) + '.' + QUOTENAME(IndexName) + ''', ''PK_' + TableName +''''
FROM PKNames
WHERE IndexName <> 'PK_' + TableName
Fonte: jason strate blog