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