動的SQLのバリエーションは少し異なりますが、最初に外部キー、次に主キー、次にインデックス(ヒープに変換されないように、最初に非クラスター化インデックス(すべての非クラスター化インデックスに影響を与える可能性があります))を削除します。
USE specific_database;
GO
まず、すべての外部キーを削除します。
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';
SELECT @sql = @sql + N'ALTER TABLE '
+ QUOTENAME(OBJECT_SCHEMA_NAME([parent_object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([parent_object_id]))
+ ' DROP CONSTRAINT ' + QUOTENAME(name) + ';
'
FROM sys.foreign_keys
WHERE OBJECTPROPERTY([parent_object_id], 'IsMsShipped') = 0;
EXEC sp_executesql @sql;
次に、主キーを削除します。
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';
SELECT @sql = @sql + N'ALTER TABLE '
+ QUOTENAME(OBJECT_SCHEMA_NAME([parent_object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([parent_object_id]))
+ ' DROP CONSTRAINT ' + QUOTENAME(name) + ';
'
FROM sys.key_constraints
WHERE [type] = 'PK'
AND OBJECTPROPERTY([parent_object_id], 'IsMsShipped') = 0;
EXEC sp_executesql @sql;
そして最後に、最初に非クラスター化されたインデックス:
DECLARE @sql NVARCHAR(MAX);
SET @sql = N'';
SELECT @sql = @sql + N'DROP INDEX '
+ QUOTENAME(name) + ' ON '
+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))
+ '.' + QUOTENAME(OBJECT_NAME([object_id])) + ';
'
FROM sys.indexes
WHERE index_id > 0
AND OBJECTPROPERTY([object_id], 'IsMsShipped') = 0
ORDER BY [object_id], index_id DESC;
EXEC sp_executesql @sql;
データベースエンジンチューニングアドバイザは、これらのインデックスの束を推奨することに注意してください(また、提示するワークロードによっては、一部を見逃したり、冗長でほぼ重複したインデックスを提案したりする場合があります)。ただし、削除したばかりのデータ整合性(PK、FK、固有の制約)は推奨されません。