0

ここに興味深いものがあります...私は1つのデータベース全体(db1)と構造をあるデータベースから別のデータベースにコピーすることに取り組んで(db2)おり、そうする前に、db2からすべてのテーブルを削除しようと決めました。私はいつものことsp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAING ALL'sp_msforeachtable 'DROP TABLE ?'しましたが、残念なことに、おそらく6つのテーブルを保存してすべて削除しました。これらのテーブルには、それらへの外部キー参照がまだあるようです。検索を行ったところ、このSQL DROP TABLE 外部キー制約が見つかりました。これは、これらの外部キー参照を見つけて削除しようとする方法を示しています。

これは興味深い部分です。その情報を使用してそれらを削除しようとすると、オブジェクトが存在しないか権限がないため、ssms がオブジェクトを見つけられないと言われました。外部キー参照は、以前に削除したテーブルからのものです。

そんなことがあるものか?そして、ここから一体どのように進歩するのでしょうか?

4

1 に答える 1

0

「それらを削除しようとすると」とはどういう意味かわかりません。システム テーブルから外部キーを削除しようとしている場合、それは間違いなく間違いです。

私の推測では、これらの最後の 6 つのテーブルを今すぐ削除することができます。

2 つのテーブル A と B があるとします。

create table A (a int) 
create table B(b int, foreign key (b) references (A.a))

そして、テーブルを削除しようとします。 drop table AB が宣言された外部キーでそれを参照するため、失敗します。drop table Bしかし、 A は参照されなくなっても気にしないので、 自由にできます。

したがって、最初のパスの後、1 つDROPが失敗し、1 つが成功し、1 つのテーブルが残り、FK 参照がなくなりました。もう一度やり直してくださいdrop table A

于 2013-04-21T05:59:27.990 に答える