• sql server 触发器


    create TRIGGER [dbo].[tr_CUSTOMER_INFO]
    ON [dbo].[T_CUSTOMER_INFO]
    AFTER UPDATE
    AS
    begin

    if ((((select bank_number from inserted) <> (select bank_number from deleted))
    or (( select mobile_phone from inserted)<>(select mobile_phone from deleted))
    or (( select email from inserted)<>(select email from deleted)))
    and SUBSTRING((SELECT UPDATE_IP FROM inserted),1,7)<>'192.168')
    rollback

    end
    GO

    那么问题来了:

    条件是:我通过uat场测试时;使用路径为172.21.33.45测试,并将ip存于数据库表T_CUSTOMER_INFO的UPDATE_IP中。修改用户资料bank_number时报错

    结果:操作提示错误“The transaction ended in the trigger. The batch has been aborted.”

    原因:ip非法,造成数据回滚。

    后来改为:if ((((select bank_number from inserted) <> (select bank_number from deleted))
    or (( select mobile_phone from inserted)<>(select mobile_phone from deleted))
    or (( select email from inserted)<>(select email from deleted)))
    and SUBSTRING((SELECT UPDATE_IP FROM inserted),1,6)<>'127.21')
    rollback

    正常更新。

    注:这样的触发器可以防止数据库客户端的操作数据库,局域网中程序修改数据库。主要用于生产环境中重要的数据库表信息。

  • 相关阅读:
    Android学习第三天
    Android学习第二天(从零开始手动创建项目)
    【k8s】Pod-containers
    【k8s】Pod-Guaranteed
    【k8s】Pod-Burstable
    【k8s】Pod-BestEffort
    【k8s】Pod-qosClass
    【k8s】Pod-readinessGates
    【k8s】Pod-containerStatuses
    【k8s】Pod-conditions
  • 原文地址:https://www.cnblogs.com/shz365/p/4169829.html
Copyright © 2020-2023  润新知