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