回答

收藏

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

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

我一直在这里查看有关触发器的先前答案,但是找不到我确切需要的答案,但是我敢肯定我的问题已经被问过/回答过。
3 T1 N/ d! u, {1 ~! m我试图跟踪对table1中columnA和columnB的任何更改。% B  E. J8 n( n( p7 l, H
如果此值更改,我想通过将现有值和新值插入带有日期的其他表中来跟踪值。
6 B2 g4 s/ m& m8 d) u3 B& y我一直在寻找对插入使用这样的东西,但是不确定如何添加来获取源表(table1)的现有值和新值:* W, Y* G, a2 z; ^- h
CREATE TRIGGER NewTrigger ON table11 l, o% e, P" }  x/ F, _* R7 ~% n
FOR INSERT
9 C  ^$ j  ]* l0 T' f, sAS
; a6 g$ c, H0 mINSERT INTO table2
% L$ W$ a. \" q& b& u1 F        (columnA , columnB, todaysDate)
; P! H# ~/ m% x; H2 C% r    .
! ?) F5 v8 p+ L    .' o6 r( o! I0 E& h, r: q4 n0 z
go
: y& Z, S+ n1 i) F# G+ b我需要使用(我认为)2 `" G* g! z5 s% b' z
Before update ON table1 FOR EACH ROW
8 O6 y" G7 _7 I  D: N9 D' Z: g   .
, K7 ^& v% I! Y0 U   .
8 {; M3 a! b- l7 F4 Z8 k1 E" D   .; d1 v/ Y% F: q1 z* \6 x2 m
BEGIN
( d7 ]% s& a: m* t. ?并查看所有更改,然后先插入这些更改,然后在更新后执行相同的操作?8 m! K" Y0 j2 S, a+ a
               
! D9 z2 v. J7 @( E' s* k% |6 h- F解决方案:
5 Y" g* e$ O& N5 v8 u: b               
& R$ H/ R- v" @, P  _4 M' N, o! w, [  E0 ]

+ F7 n% F: [' }2 D. @! i6 d                这样的事情应该可以满足您的需求。您将在INSERT下面的语句中插入值,以指示在中执行的操作MyLogTable。: K/ D7 D0 @6 G0 l' u$ y
CREATE TRIGGER [dbo].[TRIG_MyTable]% m; Q8 m* e8 t+ h1 ?
ON [dbo].[MyTable]" \. l/ K4 a1 A
AFTER INSERT, UPDATE! B8 b1 F5 y6 N0 d( T+ }" j
AS/ _+ z. p, z3 n& Q! n# I
DECLARE @INS int, @DEL int
# p" u6 H/ |* K( G: LSELECT @INS = COUNT(*) FROM INSERTED
( q4 N# m8 m/ W8 @: ^1 O0 C; F# \SELECT @DEL = COUNT(*) FROM DELETED4 b* r! _) h/ s
IF @INS > 0 AND @DEL > 0
! \7 L1 v7 A: n( F9 u7 d+ r  l0 q( {) uBEGIN  d: h7 {" M1 K2 L" C' l1 s
    -- a record got updated, so log accordingly.7 W; c% s! Z) d5 E
    INSERT INTO MyLogTable
" {+ O% o2 |  z0 E) R    SELECT 'New Values', getdate() FROM INSERTED& u) |( ?& [, i: t# n6 |
    INSERT INTO MyLogTable. M. |# f2 P4 ~+ t% [8 m
    SELECT 'Old Values', getdate() FROM DELETED
3 }8 s0 c" Y  S+ ]% x- BEND
- t# `- m1 `5 E* p6 U! zELSE 7 [( U/ _$ a' A4 I; i4 L! Q' K* K
BEGIN
0 L2 }7 y0 X, \) a  [' T    -- a new record was inserted.
1 o/ k. v3 F5 B% I0 x( r    INSERT INTO MyLogTable
- U% x% x4 s9 k    SELECT 'Insert', getdate() FROM INSERTED
9 _; [6 s- `3 z" J7 ZEND
6 P- R7 [) Q- t; V  r8 D如果你想,你也可以从添加列INSERTED和DELETED你的日志表,以及如果你想捕捉的是得到了插入或更新的实际列值。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则