記一次SQL Server insert觸發器操作
阿新 • • 發佈:2021-11-10
需求:在河道水情表(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 insertas 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;