创建一个触发器,该触发器在列更新时将值插入到新表中
技术问答
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你的日志表,以及如果你想捕捉的是得到了插入或更新的实际列值。 |
|
|
|
|
|