Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment renommer la contrainte de clé primaire pour plusieurs tables dans la base de données SQL Server - Tutoriel SQL Server / TSQL Partie 64

Scénario :

Vous travaillez en tant que Développeur SQL Server ou DBA SQL Server. Vous travaillez sur des normes de nommage pour les objets de base de données. Vous avez remarqué que dans l'une des bases de données, les contraintes de clé primaire ne respectent pas les normes de convention de dénomination de votre entreprise, à savoir "Pk_SchemaName_TableName_ColumnName", comme indiqué ci-dessous en rouge.

Comment renommer la contrainte de clé primaire pour plusieurs tables dans la base de données SQL Server - Tutoriel SQL

Solution :

Tout d'abord, nous devons trouver les contraintes de clé primaire qui ne suivent pas les normes de convention de nommage. Chaque entreprise peut avoir un document de convention de nommage différent. Votre entreprise peut ne pas inclure le nom du schéma dans la contrainte de clé primaire. Vous pouvez modifier la requête de sélection et supprimer Table_Schema du script ci-dessous.
 
USE YourDatabaseName
GO
--Declare Variables
DECLARE @DatabaseName AS VARCHAR(128)
DECLARE @SchemaName AS VARCHAR(128)
DECLARE @TableName AS VARCHAR(128)
DECLARE @ColumnName AS VARCHAR(128)
DECLARE @ConstraintName AS VARCHAr(128)

DECLARE CUR CURSOR
FOR
--Get Primary Key Constraint
Select
   TC.Table_Catalog as DatabaseName,
   TC.Table_Schema AS TableSchema,
   TC.Table_Name AS TableName,
   CCU.Column_Name AS ColumnName,
   TC.Constraint_Name AS ConstraintName
  From
   information_Schema.Table_Constraints TC  
INNER JOIN
   Information_Schema.constraint_column_usage CCU  
      on TC.Constraint_Name=CCU.Constraint_Name  
      and TC.Table_Name=CCU.Table_Name  
where
   Constraint_Type='PRIMARY KEY'
--Change your criteria as per your naming convention 
   and 'Pk_'+TC.Table_Schema+'_'+TC.Table_Name
   +'_'+CCU.Column_Name<>TC.Constraint_Name
OPEN Cur
FETCH NEXT
FROM Cur
INTO @DatabaseName,@SchemaName,@TableName,@ColumnName,
@ConstraintName
WHILE @@FETCH_STATUS = 0
BEGIN
    --Build dynamic sql for each database 
    DECLARE @SQL VARCHAR(MAX) = NULL
   SET @SQL ='sp_rename '+Char(10)
   SET @SQL+='@objname ='''+@SchemaName+'.'+@ConstraintName+''',' 
   SET @SQL+='@newname='''+'Pk_'+@SchemaName
   SET @SQL+='_'+@TableName+'_'+@ColumnName+''','
   SET @SQL+='@objtype = ''object'''
    --EXEC (@SQL)
    PRINT @SQL
    FETCH NEXT
    FROM Cur
    INTO @DatabaseName,@SchemaName,@TableName,@ColumnName,
@ConstraintName
END
CLOSE Cur
DEALLOCATE Cur


J'ai exécuté le script ci-dessus sur l'une de mes bases de données et voici les déclarations imprimées que je vois pour deux contraintes de clé primaire qui ne suivaient pas les normes de dénomination selon les normes de mon entreprise.
Comment renommer les contraintes de clé primaire pour plusieurs tables SQL Server dans SQL Database


Les contraintes de clé primaire ont été renommées avec succès comme indiqué ci-dessous. Comment vérifier et renommer les contraintes de clé primaire dans la base de données SQL Server dans SQL Server