3

データベースから行を削除するときに、制約違反を回避するためにクエリを実行しています。可能な限りON DELETE CASCADEオプションを使用していますが、削除の実行を許可したくない場合があります。

例:

場合:

  1. 列 ID を持つ DEPT テーブルがあります
  2. ON DELETE CASCADE オプションなしで DEPT テーブルを参照する列 DEPTID を持つ CUSTOMER テーブルがあります。
  3. ON DELETE CASCADE オプションで DEPT テーブルを参照する列 DEPTID を持つ AREA テーブルがあります。

次のクエリは、DEPT テーブルを参照する 2 つのテーブル (CUSTOMER と AREA) を一覧表示します。

SELECT *
FROM sys.foreign_key_columns fkc
JOIN sys.columns col ON
     fkc.parent_object_id = col.object_id 
     AND fkc.parent_column_id = col.column_id
WHERE object_name(referenced_object_id) = 'DEPT'

ただし、上記の例では、テーブル CUSTOMER だけで、オプションなしで外部キーを持つテーブルのみをクエリに表示したいと考えています。ON DELETE CASCADE

何か案は?

4

2 に答える 2

9
select ao.name,ao.type_desc,delete_referential_action_desc,*
from sys.foreign_keys fk 
inner join sys.all_objects ao 
on fk.parent_object_id = ao.object_id     
where delete_referential_action_desc <> 'CASCADE'
于 2013-01-17T16:00:34.777 に答える
2
SELECT *
FROM sys.foreign_key_columns fkc
JOIN sys.columns col ON
     fkc.parent_object_id = col.object_id 
     AND fkc.parent_column_id = col.column_id
WHERE object_name(referenced_object_id) = 'DEPT'
AND  objectproperty(fkc.constraint_object_id , 'CnstIsDeleteCascade')=1
于 2013-01-17T16:00:03.590 に答える