zoukankan      html  css  js  c++  java
  • T-SQL触发器踩坑小计

    今天接到一个开发任务,一个对象更新时,同时触发另一个对象的更新。本来公司有SDK可以开发这部分,可想着这不就是个Trigger么,就直接在数据库那块写了个触发器。

    • exists (select 1 from MOCProject)是比exists (select * from MOCProject)的性能有优化的。
    • 关于变量的select语法赋值,需要注意如果查出的数据包含多行,赋值是随机的,有可能是赋值最后一行,也有可能是随机的一行。参考这个网页:select-vs-set-for-variable-assignment-in-sql-server/
    • 关于Bulk update。后来调试,SSMS怎么都能成功,测试环境怎么都不能成功。问了提供SDK相关的同事,原来Insert操作是用的Bulk Insert,默认是不能fire the trigger的。也不可能给我开Option,影响整体性能。好吧,老老实实滚回去调用SDK写代码了。
    IF (object_id('tgr_update', 'TR') IS NOT NULL)
        DROP TRIGGER tgr_update
    GO
    CREATE TRIGGER tgr_update
      ON [dbo].[SPFData]    --触发器对象表
      FOR update -- ,insert --插入或更新时触发.
      AS
      BEGIN
        DECLARE @oldStatus varchar(20), @newStatus varchar(20), @mocid varchar(20), @obid varchar(20);
        SELECT @oldStatus = status, @obid = OBJOBID from deleted;
        SELECT @newStatus = status from inserted;
        SELECT @mocid = Name from DATAOBJ where OBID = @obid;
        IF (exists (select 1 from MOCProject where MOCID = @mocid ) AND @newstatus = '完成')
            BEGIN
                update MOCProject set status = replace(name, @oldName, @newName) where MOCID = @mocid;
                print 'succeed.';
            END
        ELSE
            print 'failed.';
      END
    GO
    

    参考

  • 相关阅读:
    JS模板引擎 :ArtTemplate (2)
    JS模板引擎 :ArtTemplate (1)
    nodeJs 初探 ~
    javascript高级函数
    Js高程笔记->引用类型
    html5离线存储
    (摘抄)HTTP 协议详解
    cordova /phonegap 自定义插件
    phonegap/cordova常用命令
    phonegap上传以及下载图片
  • 原文地址:https://www.cnblogs.com/dalianliyan/p/12978292.html
Copyright © 2011-2022 走看看