MSSQL トリガーに問題があります。IDが他のテーブルに存在するかどうかをチェックするトリガーを作成したいのですが、存在する場合はレコードを挿入しません。
例 Person があります。Person は Student または Teacher になることができますが、同時に Student と Teacher になることはできません。したがって、挿入しようとしている Student と同じ ID を持つ Teacher が存在するかどうかを挿入および更新する前に確認する必要があります。これは明らかですか?
私は答えを見つけようとしましたが、いくつかのトリガーを見つけましたが、私が望むものではありませんでした。これで私を助けてもらえますか?
問題に UML ダイアグラムを添付します: UML ダイアグラム
モハメド・アリの助けを借りて、私はこれを書きました:
CREATE Trigger tr_TriggerName
ON Student
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS
(SELECT Teacher.id
FROM Teacher
WHERE Teacher.id =
(SELECT inserted.id FROM inserted))
BEGIN
/* This isnert is wrong I don't know how to write it?????*/
INSERT INTO Student VALUES (inserted.id, inserted.field1, inserted.field2);
END
ELSE
RAISERROR ('There is already a Teacher with the same Student id', 0, 0);
RETURN
END
これはまさに私が望んでいるものですが、この挿入物の書き方がわかりません。
先ほど、Person は Student または Teacher になることができると書きましたが、同時に Student と Teacher になることはできません。したがって、Student をテーブルに挿入したい場合は、Teachers のテーブルを確認する必要があります。Teacher が同じ Person ID を持つ場合 (挿入しようとする Student など)、エラー メッセージを表示する必要があります。If (または else..:)) Teacher が存在しない場合、彼を挿入する必要がありますが、この挿入をトリガーに書き込む方法がわかりません。