【发布时间】:2020-09-12 14:04:12
【问题描述】:
我有两张桌子,
-
evaluer表id_ch 整数 | id_abonne int 外键引用 abonne|评估int |
abonne表
id int primary key | name
我必须在插入时向evaluer 表添加一个触发器。如果该 idabonne 的记录超过 5 条,则触发器应停止插入。我可以编写用于逐行插入的代码,但我希望它也适用于多行,而且我不想使用游标。我使用了 join 但它不起作用
create trigger eval
on evaluer
instead of insert
as
begin
insert into evaluer(id_ch, id_abonne, evaluation)
select *
from inserted i
join (select ev.id_abonne
from evaluer ev
join inserted ins on ins.id_abonne = ev.id_abonne
group by ev.id_abonne
having count(*) <= 5) tc on i.id_abonne = tc.id_abonne
end
有没有不用光标的方法?
【问题讨论】:
-
因此,如果应用程序插入超过 5 行并且您的
只是忽略了第五行之后的所有内容,那么您认为在不向应用程序提供任何反馈的情况下简单地删除“附加”是否明智? ?还是“停止插入”实际上意味着应该引发错误,然后您的应用程序可以以某种方式响应? -
我必须同意@SMor,您的数据库服务器的“静默”故障通常是一个坏主意,以后往往会导致很多问题。例如,
inserted伪表没有隐式顺序,因此如果插入超过五行,则无法保证实际插入哪些行。 -
我想在停止插入后显示一条消息,触发器应该插入前 5 条记录,然后停止添加更多
标签: sql sql-server