回答

收藏

SQL Server尝试捕获最终

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

我有一个需要类似以下内容的场景 .NET's try-catch-finally block.% s8 w4 |& z' ^1 h" K: _6 _/ U
在我的尝试,我会CREATE a #temp table,INSERT数据,将其与基于处理其他数据集#temp。
; B6 y. F  G  ^" Z9 q; N- B在CATCH随后RAISERROR。有可能FINALLY阻止DROP #temp吗?下面是伪代码:
5 m, J1 S; `  J1 Y& C3 xBEGIN TRY
+ v' X0 F6 B/ ~) K3 c( I/ K% Q/ C% ~  CREATE TABLE #temp! ?! j$ n9 e+ a3 g) ~% T9 g2 O
  (# A" R+ H5 j( g+ ?& R
     --columns
" o, f  q6 e- N0 O' S# w) }4 i) {: e  )
' \$ v0 N& q2 O& G; K( Q; Y  --Process data with other data sets
- O- A3 d: ^3 p5 h1 K, |END TRY
  ]+ h+ M+ h9 j. W2 l$ [. xBEGIN CATCH7 h6 o7 q- A! n# T) n
  EXECUTE usp_getErrorMessage+ L2 K7 e% r2 D6 b/ j: X* d0 R4 V/ h
END CATCH, c) b8 m; S( a
BEGIN FINALLY
% N/ a7 Q- L. G% l0 [/ e$ q  DROP TABLE #temp
1 }" I, `* P% W5 @/ ^& X2 f# wEND FINALLY4 f5 b/ o: F( \+ E6 k% R
                : c! `& z4 K1 A, N, @+ V
解决方案:0 `9 ^- T- \1 Z+ u2 X( x
               
7 |7 N4 H" Y% F8 q3 ]. e+ Y
" R, J8 ?, q# X9 y: M; W
* H2 M$ {; e" P6 l1 J                无需创建表,您只需声明一个表变量(查询结束时该变量将自动消失)。
% Q2 F8 `5 u. }# Y+ G2 ABEGIN TRY
6 M( O1 J" \. X) o6 S0 P1 x; BDECLARE @temp TABLE" N% n7 e, D2 }$ `
(6 e  L2 s. ^3 n4 I- @
    --columns5 n1 P, R- ^6 t4 M
)
  K) B. a" Y5 d* Y( e- a--do stuff, d# r" j* E7 j3 S3 q0 X# O  B
END TRY2 Z1 u- L! m- u+ A% A
BEGIN CATCH
1 w4 p& U! S6 Z) R--do other stuff( B9 u0 |; Q6 p
END CATCH
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则