sql >> データベース >  >> RDS >> Sqlserver

SQLServerデータベースの複数のテーブルの主キー制約の名前を変更する方法-SQLServer/TSQLチュートリアルパート64

    シナリオ:

    あなたはSQLServer開発者またはSQLServerDBAとして働いています。あなたはデータベースオブジェクトの命名基準に取り組んでいます。データベースの1つで、主キー制約が、以下に赤で示されている「Pk_SchemaName_TableName_ColumnName」という会社の命名規則に準拠していないことに気づきました。

    SQLServerデータベースの複数のテーブルの主キー制約の名前を変更する方法-SQLチュートリアル

    >

    解決策:

    まず最初に、命名規則の標準に準拠していない主キー制約を見つける必要があります。会社ごとに異なる命名規則文書を作成できます。会社が主キー制約にスキーマ名を含めていない可能性があります。選択クエリを変更して、以下のスクリプトからTable_Schemaを削除できます。
     
    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


    データベースの1つで上記のスクリプトを実行しました。これは、会社の標準に準拠していない2つの主キー制約について表示されるステートメントです。
    SQLデータベース内の複数のSQLServerテーブルの主キー制約の名前を変更する方法


    主キー制約は、以下に示すように正常に名前が変更されました。 SQLServerのSQLServerデータベースの主キー制約を確認して名前を変更する方法
    1. JSON_UNQUOTE()–MySQLのJSONドキュメントから引用符を削除します

    2. SQLServerでの動的SQL実行

    3. IRI-Windocksテストデータベースリポジトリ

    4. MicrosoftAccessでレポートヘッダーにロゴを追加する方法