我对 MSSQL 触发器有疑问。我想创建触发器,它将检查 id 是否存在于其他表中,如果存在则不会插入记录。
示例我们有 Person,Person 可以是 Student 或 Teacher,但不能同时是 Student 和 Teacher。所以我需要在插入和更新之前检查教师是否存在与我尝试插入的学生相同的 id。我不确定这是否清楚?
我试图找到答案,我找到了一些触发因素,但不是我想要的。你能帮我解决这个问题吗?
我附上我的问题的 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 插入到我的表中,我必须检查表是哪些教师。如果 Teacher 存在具有相同的 Persson id(例如我尝试插入的 Student),我必须显示错误消息。如果(否则..:))老师不存在我需要插入他,但我不知道如何在我的触发器中编写这个插入。