【问题标题】:Exception The transaction ended in the trigger. The batch has been aborted异常 事务在触发器中结束。该批次已中止
【发布时间】:2019-12-08 09:51:55
【问题描述】:

你能帮我解决这个错误吗

事务在触发器中结束。该批次已中止

我的代码是:

alter trigger t1 
on Client 
after insert, update
as
begin
    if (exists (select cincli from inserted 
               intersect 
               select cincli from Client))
        rollback transaction
end

不知道问题出在哪里?

【问题讨论】:

  • 如果IF 评估为 TRUE,则“问题”,因此事务被回滚。
  • @Larnu 你能帮帮我吗
  • 不知道你想达到什么目标?我可以告诉你为什么你会得到这个错误,我不能告诉你如何在不知道那是什么的情况下做你想做的事情。
  • @Larnu haha​​ha 我很抱歉我是 sql 的新手 我想要如果我插入一个 id 并且如果这个 id 存在我的程序做一个回滚我知道有多种方法要做那个,但是老师让我那样做
  • 为什么不只使用主键..?并让 RDBMS 处理 ID 的生成,可能吗?

标签: sql sql-server


【解决方案1】:

就像我在 cmets 中所说,不要使用 TRIGGER 来检查是否存在重复值。考虑到您在谈论 ID,那么 PRIMARY KEY 似乎是正确的选择:

ALTER TABLE t1 ADD CONSTRAINT PK_T1 PRIMARY KEY CLUSTERED (cincli);

如果cincli 不总是升序,您可能需要NONCLUSTERED 主键,而是应该在始终升序的列上创建CLUSTERED INDEX

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2012-08-01
    • 1970-01-01
    • 2017-07-15
    相关资源
    最近更新 更多