回答

收藏

在使用DELETE TRIGGER进行DELETE之前将已删除的值插入表中

技术问答 技术问答 149 人阅读 | 0 人回复 | 2023-09-13

由于某种原因,我找不到我需要的确切答案。我在这里搜索了最后20分钟。
! H  v$ m. u) ~% e  P% s% @我知道这很简单。很简单。但是由于某种原因,我无法触发扳机。
0 R  G9 F! Y- O$ C$ t- Z2 n我有两列的桌子
6 d2 x2 p* P# E* r3 tdbo.HashTags( V! I& {. u+ E3 p
|__Id_|_name_|% [) a7 |& U! L, m" \0 ^! w
|  1  | Love |- v  Y! f6 p* D9 Q1 [1 @
我想将已删除的值插入到另一个dbo.HashTagsArchive在DELETE查询中调用的表中。' m) Y& ~& q4 U* t
例子:
4 I$ O$ C8 |) P9 sDELETE FROM [dbo].[HashTags] WHERE Id=17 T/ ~- ~+ ^- I3 o2 n4 r
在此示例之后,我应该具有已删除的行,dbo.HashTagsArchive并且具有的行Id=1应被删除dbo.HashTags
. G1 p8 s  j* J* @8 K5 }我尝试了这个TRIGGER:
  B/ h4 u. C- g+ ]ALTER TRIGGER [dbo].[HashTags_BeforeDelete]' ?, P' R, h# M1 H; ]
    ON [dbo].[HashTags]
+ k4 v# v* P6 O5 q& q    FOR DELETE
# M4 @2 R0 a* ?0 |( e8 M+ MAS
. K1 U: A6 H% e  X$ W3 N  BEGIN
& W/ A% W: `6 A3 I9 X3 p    INSERT INTO HashTagsArchive
. A$ g% Z* o0 Z7 t# c   ( Id,9 q+ R* B. p' K, ^- F) d
     HashTagId,! P4 D/ ?' w3 h  p& C6 A
     delete_date)& Q% ], ^2 A/ y; p2 M/ z
   SELECT d.Id, m.HashTagId,GETUTCDATE() FROM deleted d , Q  L' z4 Q1 s, f; [
   JOIN dbo.HashTags m ON m.Id=d.Id, B9 {' {$ `. R2 Q
    DELETE FROM dbo.HashTags
/ \0 D2 w& [! g: K* w    WHERE ID IN(SELECT deleted.Id FROM deleted)
* J! h( C3 S) ~0 X  END
* [( C3 H" B0 W* Z, p# GGO
1 o2 ^+ Y2 V/ ]( i3 K它越来越,Deleted但没有Inserted行HashTagsArchive
+ C% W4 ]# |9 R3 o$ H6 m               
& r! c/ G: Z' a0 v! `) o& Y解决方案:$ ]5 i0 Q9 `1 ?* O8 D
                . G$ t4 r. x6 E5 S
- L2 v7 k. D( I: ]5 w

+ L. Y1 [5 U$ f% k; T                您的问题是:删除 已发生* ,此触发器将触发。因此,您无需再加入任何行! *HashTags" U) F8 r2 s4 x% j
您需要改用以下触发器:
2 f8 @( O" @, O$ T7 b8 \ALTER TRIGGER [dbo].[HashTags_BeforeDelete]2 k2 }# b) G; S6 x- h& ]0 b
    ON [dbo].[HashTags]8 g1 r! S/ m5 B. ?) i! E
    FOR DELETE
9 |* q- `2 F+ @  G* x1 @* S" }7 YAS7 d4 P  `& K  y0 t$ A' T
  BEGIN- z: X& }& e2 e" y1 _1 j
    INSERT INTO HashTagsArchive(Id, HashTagId, delete_date)
  b. I, k5 x4 J6 t1 ^% Y       SELECT - `6 K0 E! Z' u) R- p; e' K
           d.Id, d.HashTagId, GETUTCDATE() 7 {2 W" N, C& [6 q: q+ j+ e
       FROM deleted d
/ B3 R8 F6 `+ X9 d' o0 c  END4 m- ?9 ?2 n+ J, W2 i) X
GO
$ O% }8 f8 t. ?. u" F& b/ s. D# V该Deleted伪表包含 整行(S) 已删除的-无需加入任何东西…4 V. M: X" W3 z
另外:删除发生后,此触发器将触发-因此您无需在触发器内部做任何事情-只需将这些信息插入存档表中即可。其他所有内容都由SQL Server为您处理。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则