シナリオ:
あなたは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チュートリアル