1. 程式人生 > 其它 >記一次SQL Server insert觸發器操作

記一次SQL Server insert觸發器操作

需求:在河道水情表(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;