オラクルでは、すべてのテーブルと制約を削除するには、次のように入力します
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
これにより、テーブルとその依存関係が完全に削除されます。SQLサーバーに相当するものは何ですか??
オラクルでは、すべてのテーブルと制約を削除するには、次のように入力します
DROP TABLE myTable CASCADE CONSTRAINTS PURGE;
これにより、テーブルとその依存関係が完全に削除されます。SQLサーバーに相当するものは何ですか??
SQL Server Management Studio で、[オプション]、[SQL Server オブジェクト エクスプローラー]、[スクリプト] の順に移動し、[依存オブジェクトのスクリプトを生成] を有効にします。次に、テーブルを右クリックし、[スクリプト] > [ドロップ先] > [新しいクエリ ウィンドウ] を選択すると、テーブルが生成されます。
SQL に同様の洗練されたソリューションがあるとは思えません。テーブルを削除する前に、まず関連する制約をすべて削除する必要があります。
幸いなことに、これはすべて情報スキーマに格納されており、それにアクセスして、自分のワック リストを取得できます。
このブログ投稿で必要なものを入手できるはずです: http://weblogs.asp.net/jgalloway/archive/2006/04/12/442616.aspx
-- t-sql scriptlet to drop all constraints on a table
DECLARE @database nvarchar(50)
DECLARE @table nvarchar(50)
set @database = 'DatabaseName'
set @table = 'TableName'
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
exec sp_executesql @sql
END
これは恐ろしい解決策かもしれませんが、手っ取り早い方法だと思います。これは Vinnie の回答に似ていますが、SQL ステートメントの生成物は、すべての制約とテーブルを削除する別の一連の SQL ステートメントです。
(
select
'ALTER TABLE ' + tc.table_name + ' DROP CONSTRAINT ' + tc.constraint_name + ';'
from
INFORMATION_SCHEMA.TABLES t
,INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
where
t.table_name = tc.table_name
and tc.constraint_name not like '%_pk'
and tc.constraint_name not like 'pk_%'
and t.table_catalog='<schema>'
) UNION (
select
'DROP TABLE ' + t.table_name + ';'
from
INFORMATION_SCHEMA.TABLES t
where
t.table_catalog='<schema>'
)
いくつかのテーブルがあなたのテーブルを参照するまで、これはすべて楽しいゲームです...
次に、提供されたコードを次のように変更する必要があります。
CREATE PROCEDURE _cascadeConstraints @database nvarchar(30) = NULL, @table nvarchar(60) = NULL
as
DECLARE @sql nvarchar(255)
WHILE EXISTS(select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where constraint_catalog = @database and table_name = @table)
BEGIN
select @sql = 'ALTER TABLE ' + @table + ' DROP CONSTRAINT ' + CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where constraint_catalog = @database and
table_name = @table
select @sql = 'ALTER TABLE ' + tc.TABLE_NAME + ' DROP CONSTRAINT ' + tc.CONSTRAINT_NAME
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc join
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc on
(rc.CONSTRAINT_CATALOG = tc.CONSTRAINT_CATALOG and
rc.CONSTRAINT_NAME = tc.CONSTRAINT_NAME) join
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc_pk on
(tc_pk.CONSTRAINT_CATALOG = rc.CONSTRAINT_CATALOG and
tc_pk.CONSTRAINT_NAME = rc.UNIQUE_CONSTRAINT_NAME)
where tc.constraint_catalog = @database
and tc_pk.TABLE_NAME = @table
exec sp_executesql @sql
END
go
最終的に、テーブルを削除しています。したがって、次の 2 つのコマンドを実行するだけです。
テーブルを変更 ... 制約を削除 ...
テーブルをドロップ...
1> ALTER TABLE PRJ_DETAILS DROP CONSTRAINT FK_PRJ_TYPE ;
-- テーブル名と制約名はパラメーターです
2>ドロップテーブル。
最初に、テーブルに関連付けられた名前で制約を削除します。次に、テーブルを削除できます。
それは私にとってはうまくいき、簡単でもありました。