Sqlserver2005でテーブルを作成してい分からなかったので質問します。
[テーブルA]
{フィールド1}主キー
(データ1000)
(データ1001)
(データ1002)
これを親とするテーブルBを作成して
[テーブルB]
{フィールド1}主キー{フィールド2}主キー
(データ1000) (データ1001)
(データ1001) (データ1002)
(データ1002) (データ1003)
[テーブルB]の{フィールド1と2}を[テーブルA]の
{フィールド1}にリーレーションを張って
[テーブルA]の{フィールド1}のデータが消した時に[テーブルB]の{フィールド1,2}
のデータ、どちらかに該当するデータがあった場合に行ごと削除したいので
{フィールド1,2}のリレーションシップの設定の「DeleteRule」を2つとも「重ねて表示」としたいのですが
「パスが循環するか、複数のパスに連鎖する可能性があります。ON DELETE NO ACTION、ON UPDATE NO ACTION、を指定するか、他の FOREIGN KEY 制約を変更してください。
制約を作成できませんでした。以前のエラーを調べてください。」
と表示されて出来ませんこの場合フィールド1,2どちらか1つのフィールドしか
DeleteRule「重ねて表示」に設定できないのでしょうか?
こういう風に分岐する道筋を明記するテーブルを作りたいのですが
1━┳2
┗3
自分の作ったテーブルの構造が良くないかもしれないので上に書いてあるような
テーブルでは駄目だという方もどういったテーブル構造が良いのか教えて欲しいです
No.1ベストアンサー
- 回答日時:
>1 回の DELETE または UPDATE 操作によって起動される連鎖参照動作は、循環参照を含まないツリー形式になっている必要があります。DELETE または UPDATE 操作によって生じる一連の連鎖参照動作の影響を複数回受けるテーブルがあってはいけません。
上記に反することから、このケースはCASCADEできないと考えられます。
したがって、外部参照制約だけで表現することはできません。仕様だから仕方がありません。
代替案としては、参照元のテーブルAには通常の外部参照制約だけを掛け(ON DELETE NO ACTION)、削除されたときの動きはINSTEAD OFトリガで実装することになると思います。
テーブルのデザインで回避したいというならば、テーブルBにテーブルAを参照する複数のキー項目を持たせないようにするしかありません。
(マッピングIDでも持たせて2行で収録するとかです)
この回答への補足
ALTER TRIGGER Trigger2 ON [テーブルA]
INSTEAD OF Delete
AS
Begin
DELETE From [テーブルB]
Where [テーブルB].{フィールド1} = (SELECT [テーブルA].{フィールド1} From Deleted)
OR [テーブルB].{フィールド2} = (SELECT [テーブルA].{フィールド1} From Deleted)
DELETE From [テーブルA] Where [テーブルA].{フィールド1} = (SELECT Img_Hash From Deleted)
End
いろいろ調べてこういう風に書くと上手くいきましたありがとうございます。
回答ありがとうございます。とりあえず今のやり方では出来ない事が分かったので
モヤモヤが取れました。INSTEAD OFトリガで削除する方法でやってみたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- その他(データベース) IT用語について質問です。 以前ITパスポートの試験を受けた際にデータベースが何の集まりかについての 2 2022/12/10 12:29
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで、固定アルファベット+...
-
Accessでテーブルの値をテキス...
-
IT用語について質問です。 以前...
-
ACCESSでオートナンバーを任意...
-
accessで重複を防ぎたい
-
SQLServer2005のSQL文での別名...
-
ACCESSで和暦を西暦に・・・
-
ACCESSで400以上のフィールドが...
-
主キーはオートナンバー型のID...
-
Accessで同一作業の繰り返し
-
アクセスで年齢順に並び替えを...
-
Officeアクセス テーブル「テ...
-
【Access】フォームで自動計算...
-
Access2002で後から前日比増減...
-
Access VBA 抽出したレコード...
-
INSERT INTO ステートメントに...
-
accessのレポートで元になるテ...
-
Accessで、フィールドにルック...
-
Accessのオートナンバー
-
ACCESS 入力文字数制限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブルの値をテキス...
-
Accessのフィールド数が255しか...
-
ACCESSで400以上のフィールドが...
-
ACCESSでの改行コード
-
INSERT INTO ステートメントに...
-
accessのレポートで元になるテ...
-
アクセス エラーを数値「0」に...
-
ExcelのデータをコピーでACCESS...
-
Access 昇順・降順で並び替え...
-
Accessで、固定アルファベット+...
-
accessで重複を防ぎたい
-
ACCESSで和暦を西暦に・・・
-
アクセス VBAで列の入れ替...
-
SQLServer2005のSQL文での別名...
-
ACCESS2000「定義されているフ...
-
主キーはオートナンバー型のID...
-
ACCESSでオートナンバーを任意...
-
ACCESSでテーブルのフィールド...
-
アクセス A列コピー B列貼り...
-
IT用語について質問です。 以前...
おすすめ情報