回答

收藏

创建一个触发器,该触发器在列更新时将值插入到新表中

技术问答 技术问答 284 人阅读 | 0 人回复 | 2023-09-14

我一直在这里查看有关触发器的先前答案,但是找不到我确切需要的答案,但是我敢肯定我的问题已经被问过/回答过。
% C% I5 M4 [5 B我试图跟踪对table1中columnA和columnB的任何更改。
$ \7 D( B4 J, R5 s: i# [5 V6 P  |如果此值更改,我想通过将现有值和新值插入带有日期的其他表中来跟踪值。  K5 h, z7 }8 C6 _* j( [
我一直在寻找对插入使用这样的东西,但是不确定如何添加来获取源表(table1)的现有值和新值:
$ e; Q  g% O  ^CREATE TRIGGER NewTrigger ON table1
+ x0 K# a4 M1 ?0 ^; T/ `9 t; p& H6 ^FOR INSERT
! j4 P6 a5 Z/ s2 AAS
  A+ [) T; h& H0 R/ N8 |- S  gINSERT INTO table21 L9 `/ r. e" z; f# ^" |% d1 T9 w
        (columnA , columnB, todaysDate)
4 y! j8 c  o5 Q' j5 |+ g    .# ]" M; @& z7 w$ n: o
    .  ^9 o) ?% k4 O8 r: f
go* W& Y3 J; V# y
我需要使用(我认为)7 Z# v4 |) f3 {0 H% \
Before update ON table1 FOR EACH ROW. l, _0 L! e: Q3 k& j
   .
$ @+ C: _$ W( ?8 A( a8 X6 T0 ~8 F   .: X" p) h4 `, f$ t* c
   .3 ]' }9 Y, Q; c
BEGIN
) y; z% G8 A) ^; x; y% `并查看所有更改,然后先插入这些更改,然后在更新后执行相同的操作?  I% R3 M3 Z7 x' I" s5 @+ N) S
                " _9 p0 D7 {) N; Y* }$ V7 }+ o/ m
解决方案:; ^( H. F9 @$ ?: T3 y7 n  X' X
               
) P6 C$ c4 Q0 T5 ?, h" q7 v7 x, Y2 S& C

: ^7 L2 `4 b+ }' v                这样的事情应该可以满足您的需求。您将在INSERT下面的语句中插入值,以指示在中执行的操作MyLogTable。2 s' r) ?1 t& K# ~
CREATE TRIGGER [dbo].[TRIG_MyTable]
0 a$ x3 D2 o2 U  Z' s. I/ cON [dbo].[MyTable]2 h( E/ d) R& Q. w) l
AFTER INSERT, UPDATE" t: ^. [# E9 `: k9 D- `% F, w
AS  ?2 _7 N7 J" v, k- L
DECLARE @INS int, @DEL int3 n1 P" }' f6 a( s+ \
SELECT @INS = COUNT(*) FROM INSERTED" ~& B* @, C. {* H
SELECT @DEL = COUNT(*) FROM DELETED
5 ?/ C6 Y& K2 H8 ]+ C% SIF @INS > 0 AND @DEL > 0
. s# B- B3 x- g% b/ r! OBEGIN
- b; B2 ?% N2 d' g8 m# V' M    -- a record got updated, so log accordingly.0 v' a- Y6 u/ _
    INSERT INTO MyLogTable. |8 a. f5 V/ J1 E3 W+ g9 c2 B
    SELECT 'New Values', getdate() FROM INSERTED) v/ e( `) V& M' J  a- W5 [+ B
    INSERT INTO MyLogTable0 {6 m4 ]9 e: O# r+ |0 w* r& A7 V
    SELECT 'Old Values', getdate() FROM DELETED8 b5 \4 o! H$ M  r1 Y* i
END% ?: {2 q- _4 Y- e8 Y
ELSE 5 o1 }+ ^% _+ |) s  z! i! P( e8 z8 V$ w
BEGIN" g; @2 c) a9 X' e" Y" l
    -- a new record was inserted.8 S2 E, N& x$ b' r! e
    INSERT INTO MyLogTable
3 d1 z. E, V/ n( x& U8 Z2 v2 w    SELECT 'Insert', getdate() FROM INSERTED
; h- o( a6 e6 A* cEND
( z  c, k5 k% P+ V( ~' h& r* o8 y如果你想,你也可以从添加列INSERTED和DELETED你的日志表,以及如果你想捕捉的是得到了插入或更新的实际列值。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则