回答

收藏

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

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

我一直在这里查看有关触发器的先前答案,但是找不到我确切需要的答案,但是我敢肯定我的问题已经被问过/回答过。
3 F  k& K5 K3 _& ?& N4 _我试图跟踪对table1中columnA和columnB的任何更改。
, j0 _- ^; s1 g$ R如果此值更改,我想通过将现有值和新值插入带有日期的其他表中来跟踪值。
: u& Y$ W$ T) k* f& G( }我一直在寻找对插入使用这样的东西,但是不确定如何添加来获取源表(table1)的现有值和新值:
& t) u, }4 d) S% r2 ]CREATE TRIGGER NewTrigger ON table1
2 Y$ y% B# z) |  y+ P8 @/ CFOR INSERT- y" g8 U& `/ E. c) J) G
AS3 e# K/ B& x: s! ]! y
INSERT INTO table2: o# R2 T9 N5 K& n6 T" f$ W* j6 ?
        (columnA , columnB, todaysDate)
# N5 V+ {' G/ V* W    .
# v, N& P" g+ v/ H& C2 I    .
$ T- Q) ]. m, Ugo
# U2 l, L' a. G: F; c5 c* b2 |) p5 e2 h我需要使用(我认为)' n, k3 |$ K. T+ J+ R* k
Before update ON table1 FOR EACH ROW
' t. c& `' S" M7 g5 [& I9 \1 b   .
( W% h- F8 n1 T' n* `+ \   .3 t7 i; h- d$ q' D  w
   .4 S( x3 y5 S/ K0 ^
BEGIN
6 c3 W" w$ N( E- r) }% k7 u: A并查看所有更改,然后先插入这些更改,然后在更新后执行相同的操作?% h0 m+ g2 \. P; q" k) Q+ ]
                + ]. l) K: F8 B6 w
解决方案:; V0 W# Z! P+ \9 g) V! D1 C& m2 \
               
, H7 Q. i+ D) U( c' c% r% j- J, H
( U7 F" d, s% M, K; m
                这样的事情应该可以满足您的需求。您将在INSERT下面的语句中插入值,以指示在中执行的操作MyLogTable。" v6 I" V' I1 A1 d' p6 i( }5 e4 `
CREATE TRIGGER [dbo].[TRIG_MyTable]
+ n- l: f* _% f) e) W7 |ON [dbo].[MyTable]; D* g! D  s" [5 H9 f8 k
AFTER INSERT, UPDATE
4 _( x2 e3 T9 h; g' A# dAS
# b4 l% r' x: ]9 JDECLARE @INS int, @DEL int
' h( r: b! q& K. y% J7 U; \+ K9 b; xSELECT @INS = COUNT(*) FROM INSERTED
8 S" N$ a7 K5 [- x! R. D, f7 USELECT @DEL = COUNT(*) FROM DELETED
6 n+ a, T0 b, ~& A# wIF @INS > 0 AND @DEL > 0 : ^8 R0 A9 h6 ]8 |2 d5 {
BEGIN
. ]* d4 {4 s3 X  g/ D4 `' P! \    -- a record got updated, so log accordingly.: \$ [1 j8 r8 g1 v9 s  H! b
    INSERT INTO MyLogTable
% f: b" _& l* ?1 [6 V    SELECT 'New Values', getdate() FROM INSERTED
# l$ o; T) @0 s4 v0 M$ m    INSERT INTO MyLogTable  _5 H( m/ v! q6 t
    SELECT 'Old Values', getdate() FROM DELETED# m- E, G* b0 u! w) g: G1 o* q
END
, @- o- Y+ k0 s' sELSE 8 K6 F& r3 o/ e5 X  l) W; A
BEGIN
  d+ T8 I! ?5 p& K    -- a new record was inserted.
  }; d' o3 b6 ]' X6 M4 }3 H9 K    INSERT INTO MyLogTable
' |8 x# q0 r& r" C  P1 ^2 _/ p$ W    SELECT 'Insert', getdate() FROM INSERTED1 `2 i) q' ?, _" p& Q6 \% p& l8 T
END) m0 B, V- |3 Y! q" z- t) ?  n
如果你想,你也可以从添加列INSERTED和DELETED你的日志表,以及如果你想捕捉的是得到了插入或更新的实际列值。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则