SQL触发器建成却无反应

SQL建触发器成功,测试时触发结果未发生变化,且输出结果有两个,不知是哪里的问题,😭

img

img

答案参考ChatGPT ,如果有参考价值麻烦采纳一下,谢谢啦!!_

当SQL建立触发器后,测试时触发结果未发生变化,可能是以下几个原因:

触发器的触发条件不符合要求:触发器的触发条件是在哪个表上进行操作,以及何时进行操作。如果条件不符合要求,触发器就不会触发。需要检查触发器的触发条件是否正确。

触发器的逻辑错误:触发器的逻辑错误可能导致不会触发。需要检查触发器的逻辑是否正确。

触发器的语法错误:触发器建立时,可能存在语法错误,导致触发器无法正确执行。需要检查触发器的语法是否正确。

而输出结果有两个的问题,可能是由于在触发器执行过程中,触发了多个事件,导致输出了多个结果。需要检查触发器的逻辑是否正确,是否存在多余的触发事件。

针对这些问题,可以采取以下措施:

检查触发器的语法是否正确,是否符合触发条件。

检查触发器的逻辑是否正确,是否存在多余的触发事件。

在触发器中添加日志信息,记录触发器执行过程中的相关信息,以便更好地排查问题。

通过手动模拟触发器执行过程,检查是否存在逻辑错误和语法错误。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7648644
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:sql语句里面 将查询出来的字段的值,截取掉后面的3位之后,将剩余的值查询出来,可以这样写sql语句
  • 除此之外, 这篇博客: sql语句根据某个字段去重,获取自己需要的字段中的 sql语句根据某个字段去重,获取自己需要的字段 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在这里插入图片描述

    • 根据 new_grade_id 去重,获取其他字段
    • SELECT id,NEW_GRADE_ID, CREATE_TIME FROM LXS_USER_GRADE_CHANGE_INFO
      WHERE id in (SELECT max(id) as id FROM LXS_USER_GRADE_CHANGE_INFO
      WHERE USER_ID=‘114839’ AND CHANGE_REASON IS NULL
      GROUP BY NEW_GRADE_ID)
      在这里插入图片描述
    • 根据上一步去重,再次获取自己需要的某个字段集合
    • SELECT to_char(CREATE_TIME,‘YYYY-MM-DD’)
      FROM(SELECT id,NEW_GRADE_ID, CREATE_TIME FROM LXS_USER_GRADE_CHANGE_INFO
      WHERE id in (SELECT max(id) as id FROM LXS_USER_GRADE_CHANGE_INFO
      WHERE USER_ID=‘114839’ AND CHANGE_REASON IS NULL
      GROUP BY NEW_GRADE_ID
      ))ORDER BY NEW_GRADE_ID ASC,CREATE_TIME ASC
      在这里插入图片描述
  • 您还可以看一下 王进老师的数据库SQL查询,最佳案例讲解课程中的 关于数据库,数据库的两大阵营小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    对于触发器没有反应的问题,可能有以下几方面的原因:

    1. 触发器代码问题:触发器代码有错误,导致无法触发。可以通过检查触发器代码是否有语法错误,变量或表名是否正确等方式排查。

    2. 触发器事件不正确:触发器没有与正确的SQL事件或对象相关联。可以检查触发器与哪个表相关联,以及与哪个事件(例如insert,update,delete)相关联。

    3. 触发器开关状态问题:触发器可能被禁用或关闭。可以在SQL中打开触发器,以确保它正在运行。

    4. 触发器执行时机问题:有些触发器需要在事务提交或回滚之后执行,如果触发器事件还没有到达这个阶段,它不会触发。可以检查触发器何时执行。

    具体解决方案:

    1. 检查触发器语法是否正确: -- 示例代码(假设触发器与表test_table相关联,事件为 insert/update/delete): CREATE TRIGGER tg_test_table ON test_table AFTER INSERT, UPDATE, DELETE AS BEGIN -- 触发器代码... END 触发器的语法中,需要注意以下几点:
    2. 触发器事件:AFTER INSERT, UPDATE, DELETE
    3. 触发表:ON table_name
    4. 触发器名字:CREATE TRIGGER trigger_name
    5. 触发器代码:BEGIN...END

    以上代码都是示例代码,如果你自己的代码也有这些语法问题,需要修改正确。

    1. 检查触发器事件是否正确:

    如果触发器事件未正确指定,触发器将不会触发。例如,如果您的触发器与UPDATE事件相关联,而您只插入了一条记录,则触发器不会触发。因此,请确保您的触发器与正确的事件相关联。

    1. 检查触发器状态: 有时,触发器可能被禁用或关闭。可以在SQL中打开触发器,以确保它正在运行。例如,可以运行以下SQL命令: ALTER TRIGGER trigger_name ON table_name ENABLE; 这将确保启用了tg_test_table触发器。

    2. 检验触发器执行时机: 检查触发器何时执行。有些触发器需要在事务提交或回滚之后执行,这可能会影响触发器是否能够成功触发。触发器何时触发,请参考自己的代码逻辑。

    针对输出结果出现两个的问题,可以检查触发器是否多次执行,或者代码是否有其他的执行逻辑导致重复输出。具体还需要查看代码和输出结果才能确定。

    综上所述,针对触发器没有反应的问题,首先需要检查触发器代码和事件是否正确,并确保触发器状态可用。如果触发器需要在事务提交或回滚之后执行,请正确设置代码逻辑。对于输出结果出现两个的问题,需要检查代码逻辑是否有误,或者触发器是否多次执行。

select build_no=@build_no,room_no=@room_no from inserted 这里写错了应该改成
select @build_no=build_no,@room_no=room_no from inserted