回答

收藏

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

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

我一直在这里查看有关触发器的先前答案,但是找不到我确切需要的答案,但是我敢肯定我的问题已经被问过/回答过。
1 m! Q+ C# Z" D, h/ }7 `( Z% p我试图跟踪对table1中columnA和columnB的任何更改。  n, Z1 e1 M  C  Z9 Y5 C/ f$ N( E
如果此值更改,我想通过将现有值和新值插入带有日期的其他表中来跟踪值。
5 s' E) J1 v9 A9 e% `4 f我一直在寻找对插入使用这样的东西,但是不确定如何添加来获取源表(table1)的现有值和新值:
9 B, c& `6 ^) d% ECREATE TRIGGER NewTrigger ON table1
9 M/ j8 o8 z+ V6 E8 T  ?8 WFOR INSERT2 D- y! d8 U% i
AS
+ C1 V( z- C5 a' ^INSERT INTO table2
9 {6 F! ^* W' v5 ]2 P        (columnA , columnB, todaysDate)9 g- @8 Z. O+ c0 X
    .; J' k7 b; d+ a' t' J5 t
    .' f4 I# Z% ^5 n' C
go- V  ^# o5 m! c8 Y1 @
我需要使用(我认为)% v1 q$ v+ `2 `; |- e: |
Before update ON table1 FOR EACH ROW8 j: z/ |7 p6 s) z
   .9 X0 q* t) G! T) V3 Y; X
   .
# Z4 J7 ^, x7 k# H3 z% y$ P   .7 k+ a* h; \4 H( D
BEGIN% D( f6 D9 w- e1 v
并查看所有更改,然后先插入这些更改,然后在更新后执行相同的操作?0 V, }5 E% S. a8 x4 A/ n1 E
                2 T! H9 X, n  t$ R& f
解决方案:! c: Y/ M( i$ R& I5 ^/ H
                / M6 p; \5 c* U5 }# r

0 v: T) l5 p5 `2 U$ p  V% m
* O$ ^. n7 S8 _                这样的事情应该可以满足您的需求。您将在INSERT下面的语句中插入值,以指示在中执行的操作MyLogTable。! d8 O: L  }/ l* _* K# I1 @
CREATE TRIGGER [dbo].[TRIG_MyTable]& H2 @  `' g% x7 U6 ?/ h8 _
ON [dbo].[MyTable]
3 L* F6 P6 I; A4 _, n+ t3 zAFTER INSERT, UPDATE
- e* K& `. [1 M4 V5 [* A" qAS
0 y, y% h% Q  y" u; F  \( kDECLARE @INS int, @DEL int
7 w, a; M& c" t) ^+ v8 L) }) vSELECT @INS = COUNT(*) FROM INSERTED
' T' N% w6 f) a: x0 |- LSELECT @DEL = COUNT(*) FROM DELETED
: v+ q, g# J* ~; u8 c4 V( W- |2 gIF @INS > 0 AND @DEL > 0 ' T- d3 \4 o# x$ m9 U8 ~) A
BEGIN2 [- ~2 y6 @& q4 B# W3 M+ e4 [/ h
    -- a record got updated, so log accordingly.
& P( e" @/ r3 N" I/ m+ }    INSERT INTO MyLogTable- v" y& f4 v: O* Q, ~
    SELECT 'New Values', getdate() FROM INSERTED4 k. A+ M# n  l7 @/ b/ b/ ]7 r
    INSERT INTO MyLogTable
  j8 j; i2 J5 [; k0 f# O1 ^! {    SELECT 'Old Values', getdate() FROM DELETED
& ^  T" m6 v/ dEND7 L% C) m2 X# h0 b4 [6 h, B) }# g& J
ELSE 9 v: D2 P9 [8 p' D! s
BEGIN  v. i/ E' _, L
    -- a new record was inserted.8 w  k' f! n2 G! F( i/ {- J
    INSERT INTO MyLogTable5 _7 N2 M: Z/ x! x5 D' A( e
    SELECT 'Insert', getdate() FROM INSERTED' j% b- j' ]: K
END
: @, E+ |9 f' l, h6 Z如果你想,你也可以从添加列INSERTED和DELETED你的日志表,以及如果你想捕捉的是得到了插入或更新的实际列值。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则