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

SQLServerデータベースのすべてのテーブルからすべての主キーを削除する方法-SQLServer/TSQLチュートリアルパート65

    シナリオ:

    あなたはSQLServer開発者として働いています。ほとんどすべてのテーブルに主キー制約があるデータベースがあります。このデータベースをETLプロセスのステージングデータベースとして使用する必要があります。主キー制約はもう必要ありません。データベース内のすべてのテーブルのすべての主キー制約をどのように削除しますか?

    解決策:

    システムビューを使用して、主キー制約のリストを取得します。情報を取得したら、カーソルを使用して主キー制約のリストをループし、以下のスクリプトを使用してそれらを削除します。
    主キー制約を削除する一般的なスクリプトは、
    Alter Table SchemaName.TableNameDropConstraintConstraintNameです。
    データベースからすべての主キー制約を削除するスクリプトは次のとおりです
    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'
    
    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 ='Alter table ['
       SET @SQL+=@SchemaName+'].['+@TableName+']'
       SET @SQL+=' Drop Constraint ['
       SET @SQL+=@ConstraintName+']'
        PRINT @SQL
        EXEC (@SQL)
    FETCH NEXT
        FROM Cur
        INTO @DatabaseName,@SchemaName,@TableName,@ColumnName,
    @ConstraintName
    END
    CLOSE Cur
    DEALLOCATE Cur

    データベースの1つで上記のスクリプトを実行すると、データベース内のすべてのテーブルの主キー制約を削除するための変更ステートメントが出力され、実行されました。
    SQLServerデータベースのすべての主キー制約を削除する方法-SQLServerチュートリアル




    1. Lion(Mac OS 10.7)でPostgreSQLサーバーがシャットダウンしない

    2. Javaコードを介してOracleSQLスクリプトを実行する方法

    3. ISNUMERIC('。')が1を返すのはなぜですか?

    4. SQLServerデータベースの破損の原因と解決策を調べる