zoukankan      html  css  js  c++  java
  • SQL Server避免漏加where条件导致的批量误操作

    很多开发人员,包括数据库管理员都有马失前蹄的时候,update/delete时忘记了添加where条件,导致不必要的麻烦。一旦失误,必须要尝试各种恢复手段来恢复数据,尤其是正在使用的生产数据库,造成的影响可想而知,有些新手估计都要吓哭了。。。

    如下,用触发器来避免这样的误操作,当然故意为之,不再此讨论范围:

     1 use DBName
     2 if (object_id('tgr_XX_Where_Clause', 'tr') is not null)
     3     drop trigger tgr_XX_Where_Clause
     4 go
     5 CREATE TRIGGER tgr_XX_Where_Clause
     6 ON [Tabel_Name]
     7 FOR UPDATE,DELETE
     8 AS
     9 BEGIN
    10 create table #test (eventype varchar(max), parameters varchar(max), Eventinfo varchar(max))
    11 insert #test
    12 exec ('dbcc inputbuffer (@@SPID)')
    13 IF NOT EXISTS ( SELECT 1 FROM #test where Eventinfo like '% WHERE %' or (Eventinfo not like '%update %' and Eventinfo not like '%delete %')) --检测更新、删除指令必须带where,除出调用存储过程的情况,还有一个情况要排除(insert时有触发器执行了,dbcc inputbuffer只能抓取原始指令而抓不到触发器数据)
      BEGIN 15 RAISERROR('USE A WHERE CLAUSE DUMMY', 0, 1) WITH NOWAIT 16 ROLLBACK 17 END 18 END
  • 相关阅读:
    MYSQL: MYSQLBINLOG命令查看日志文件
    JAVA MAIL 发送邮件(SSL加密方式,TSL加密方式)
    Spring和Email整合详解
    java 版百度网盘功能
    Spring @Conditional注解 详细讲解及示例
    spring注解之@Import注解的三种使用方式(转载)
    Redis protected-mode属性解读
    5
    4
    3
  • 原文地址:https://www.cnblogs.com/Juning/p/10735063.html
Copyright © 2011-2022 走看看