我有MSSQL触发器的问题。我想创建触发器,它将检查id是否存在于其他表中,如果它存在,它将不会插入记录。MSSQL触发器,如果ID存在
示例 我们有Person,Person可能是学生或老师,但它不能同时是Student和Teacher。所以我需要检查之前插入和更新,如果教师存在与我试图插入的学生相同的ID。我不确定这是否清楚?
我试图找到答案,我发现了一些触发器,但不是我想要的。你能帮我解决这个问题吗?
我武官UML图与我的问题: UML Diagram
随着穆罕默德·阿里的帮助下,我写了这个:
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可能是学生或教师,但它不能在同一时间成为学生和教师。所以,如果我想插入学生到我的桌子,我必须检查哪些Teatchers。如果Teacher存在相同的Persson ID(例如我尝试插入的Student),则必须显示错误消息。如果(或者.. :) :)老师不存在我需要插入他,但是我不知道如何在我的触发器中写入这个插入。
为什么不在人员表中创建一个类型字段(比如personTypeId)来将某个人员标记为Teacher或Student。然后一个记录将是其中的一个,但不是通过设计。即'Person:PersonTypes => 1:多关系' – Kaf
我想过了。但这是我学习的任务,我的老师告诉我最好的解决方案是使用触发器,我想知道如何编写像这样的触发器。 – Purzynski
你想要例外吗?使用'RaIsError',如果有冲突?如果不允许使用INSERT,你的问题有点不清楚如何执行UPDATE。 – HABO