• sql 触发器


    很久没有接触过这个东西了,记录一下,插入数据后触发的




    ALTER TRIGGER [dbo].[Crack_Monitoring_Initialized]
    ON [dbo].[T_THEMES_DEFORMATION_DEEP_DISPLACEMENT]

    AFTER insert
    AS
    declare @sensorid int;
    declare @canshu1 int;
    declare @canshu2 int;

    ----保留值 Retain original value 另外一个触发器合并到一起了

    update T_THEMES_DEFORMATION_DEEP_DISPLACEMENT
    set ORIGINAL_DEEP_DISPLACEMENT_X_VALUE=(select DEEP_DISPLACEMENT_X_VALUE from inserted),
    ORIGINAL_DEEP_CUMULATIVEDISPLACEMENT_X_VALUE =(select DEEP_CUMULATIVEDISPLACEMENT_X_VALUE from inserted)
    where ID=(select ID from inserted) --决定需要更新的行
    --------------------------------------------------------------------


    -- 声明表变量
    DECLARE @temp TABLE
    (

    id int, --自增id
    sensorid INT,
    parameter1 decimal(18,6),
    parameter2 decimal(18,6),
    formulaid int
    );
    SELECT @sensorid = SENSOR_ID FROM inserted; --当前插入数据

    INSERT INTO @temp(id,sensorid, parameter1, parameter2 ,formulaid)
    SELECT ROW_NUMBER() OVER ( ORDER BY FORMAULA_SETID ) ID, SENSOR_ID,Parameter1,Parameter2 ,FORMULA_ID FROM T_DIM_FORMULAID_SET WHERE SENSOR_ID IN (
    SELECT SENSOR_ID FROM T_DIM_SENSOR where SAFETY_FACTOR_TYPE_ID = 120 AND IsDELETED = 0
    ) and FORMULA_ID !=0;

    declare @count int;
    select @count= COUNT(*) from @temp; --虚拟表多少条数据
    declare @index int =1;


    -- 声明变量
    DECLARE @senid INT , @formulaid int ,@id int;
    DECLARE @parameter1 decimal(18,6);
    DECLARE @parameter2 decimal(18,6);

    WHILE(@index<=@count) --循环
    begin
    DECLARE @a_id INT;
    -- 根据自增1的 id 字段进行对表 #@temp 进行查询,得到 ID
    SELECT @a_id =id, @senid= sensorid, @parameter1= parameter1,@parameter2 = parameter2,@formulaid = formulaid FROM @temp where id = @index;
    IF @formulaid = 6 ---减初值公式
    begin
    update T_THEMES_DEFORMATION_DEEP_DISPLACEMENT set DEEP_DISPLACEMENT_X_VALUE = (DEEP_DISPLACEMENT_X_VALUE -@parameter1),DEEP_DISPLACEMENT_Y_VALUE
    =(DEEP_DISPLACEMENT_Y_VALUE - @parameter2) WHERE ID =(
    SELECT TOP 1 ID FROM T_THEMES_DEFORMATION_DEEP_DISPLACEMENT WHERE SENSOR_ID = 1384 AND AGG_TYPE IS NULL order by ACQUISITION_DATETIME DESC
    )
    end

    SET @index=@index+1; --避免死循环
    end

  • 相关阅读:
    【智能合约】编写复杂业务场景下的智能合约——可升级的智能合约设计模式(附Demo)
    深入浅出区块链——零知识证明
    centos设置静态IP
    jQuery学习笔记(四):attr()与prop()的区别
    jQuery学习笔记(三):选择器总结
    jQuery学习笔记(二):this相关问题及选择器
    jQuery学习笔记(一):入门
    des解密不完整,前面几位是乱码的解决办法
    Python __init__.py 作用详解
    MySQL for mac使用记录
  • 原文地址:https://www.cnblogs.com/lvqianqian/p/14980338.html
Copyright © 2020-2023  润新知