需求:在河道水情表(ST_RIVER_R )新增插入数据时,更新实时数据表(SS_data) 中关联字段的值。
需求概括下:当A表中新增数据时,同时更新B表中的某字段
代码如下:
USE [DBCNBZ] GO /****** Object: Trigger [dbo].[tri_insert_a] Script Date: 2021/11/10 14:17:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= CREATE trigger [dbo].[tri_insert_a] on [dbo].[ST_RIVER_R] after insert as begin declare @Z1 numeric(18,3); declare @Q1 numeric(18,3); declare @Z2 numeric(18,3); declare @Q2 numeric(18,3); declare @Z3 numeric(18,3); declare @Q3 numeric(18,3); declare @TM1 datetime; declare @TM2 datetime; declare @TM3 datetime; --一站 select top 1 @Z1 = Z from [ST_RIVER_R] where STCD='00000001' order by TM desc; select top 1 @Q1 = Q from [ST_RIVER_R] where STCD='00000001' order by TM desc; select top 1 @TM1 = TM from [ST_RIVER_R] where STCD='00000001' order by TM desc; --二站 select top 1 @Z2 = Z from [ST_RIVER_R] where STCD='00000002' order by TM desc; select top 1 @Q2 = Q from [ST_RIVER_R] where STCD='00000002' order by TM desc; select top 1 @TM2 = TM from [ST_RIVER_R] where STCD='00000002' order by TM desc; --三站 select top 1 @Z3 = Z from [ST_RIVER_R] where STCD='00000013' order by TM desc; select top 1 @Q3 = Q from [ST_RIVER_R] where STCD='00000013' order by TM desc; select top 1 @TM3 = TM from [ST_RIVER_R] where STCD='00000013' order by TM desc; begin update [dbo].[SS_data] set water1=@Z1,[SunShiFlow1]=@Q1,TM=@TM1 where [dbo].[SS_data].Num ='Z1'; update [dbo].[SS_data] set water1=@Z2,[SunShiFlow1]=@Q2,TM=@TM2 where [dbo].[SS_data].Num ='Z2'; update [dbo].[SS_data] set water1=@Z3,[SunShiFlow1]=@Q3,TM=@TM3 where [dbo].[SS_data].Num ='Z3'; end end GO
我这里是每次更新了 SS_data中三个字段的值,SS_data是一张实时数据表,每次都是update操作,每个测站保留最新的一条数据。
这里注意下 触发器的变量定义和赋值的方式
declare @TM3 datetime; --一站 select top 1 @TM3 = TM from [ST_RIVER_R] where STCD='00000001' order by TM desc;