3

テーブルParentTable( id, Name, town) とその子テーブルhuman( mother, father) があり、両方の列に親テーブルへのマッピングが含まれています。

親テーブルには( ) でtown示される外部キー参照を含む列があり、その町は外部キー参照で追加されます。Towntownid, townname

問題は、人間のテーブルにカスケード制約を与える必要があることですが、SQL Server では、同じ親テーブルの複数の列にカスケードを与えることができません。だから私はこのようなトリガーを作成しました、

create trigger DEL_Parent                                             
ON Parent  
instead of delete as      
   set nocount on       

   delete from human       
   where mother IN (select id from deleted)        
      or father IN (select id from deleted)

 delete from Parent where id in(select id from deleted). 

しかし、トリガーを実行しようとすると、システムは次のエラーを表示します

削除の代わりに、または更新の代わりにトリガー DEL_Parent を親テーブルに作成することはできません。これは、テーブルにカスケード削除または更新を伴う外部キーがあるためです。

どうすれば問題を解決できますか? 前もって感謝します。

4

2 に答える 2

2

クエリを次のように変更します。

create trigger DEL_Parent                                             
ON Parent  
after delete as      
  set nocount on       

  delete 
  from human       
  where mother IN (select id from deleted)        
     or father IN (select id from deleted)

  delete 
  from Parent 
  where id in(select id from deleted)

アクションINSTEAD OF DELETEで定義された外部キーを持つテーブルにはトリガーを定義できないためです。DELETE

于 2013-02-28T04:14:22.360 に答える
0

INSTEAD OF DELETE トリガーは、DELETE アクションで定義された外部キーを持つテーブルには定義できません。

ソース: http://msdn.microsoft.com/en-us/library/ms191208(v=sql.90).aspx

したがって、必要に応じてcascade delete、それを強制したい場合は、ドロップしてトリガーで処理する必要があると思います。

于 2013-02-28T04:06:33.853 に答える