回答

收藏

检查SELECT是否在存储过程中返回任何行

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

我正在写一个基本SELECT查询,类似:) V+ G9 i4 Z6 n& t% v
SELECT id, pname, pnumber 0 o8 @4 t: O7 `* w: f; V6 t
FROM tableName   K5 a5 A. `1 B$ `2 v4 s2 R
WHERE pnumber IS NOT NULL! Q7 m1 @9 {- [6 u* C
我想然后INSERT通过使用SELECT类似的结果执行:+ p; E% ]2 @3 `' V" P/ n" F
IF {**the above SELECT query returned 0 rows**}
. F$ A- `' _! q0 BBEGIN
' T0 Y3 [8 k; C+ Q    INSERT INTO tableName (pname,pnumber) VALUES ('bob', '38499483')' M4 d, I+ L- K& u& ^/ C! A
END
% ]6 s! w! l4 q  M) q我的问题是,如何检查**the above SELECT query returned 0 rows**?$ V$ I" m$ g0 C. N; M3 t! X
                ' F2 y3 B$ K2 N
解决方案:0 o  ^# W) K& [$ G) b7 |
                % M7 A4 O( Z# c

! d. m' c2 k! |0 k: [+ z' l3 p0 j5 a* o
                IF NOT EXISTS (SELECT ...)7 p0 B& U! R& i7 u  K- J
BEGIN
4 u9 F% L7 x; D# h) z  INSERT ...1 K! e& ~6 I5 P5 K! T
END
/ |5 _. b8 V% L如果您希望查询可能经常返回行(尤其是很多行),也可以这样做,这可能会提供一个更好的短路机会:$ H+ R5 n# M% W7 p% L7 c* n5 U
IF EXISTS (SELECT ...): [7 d) H: L/ K& G
BEGIN, e' F3 Y# ?! T
  PRINT 'Do nothing.';
9 Z, x3 @' y9 ^) M, w/ mEND
4 i" r; [2 T, u7 U4 w4 X* {- |ELSE
. K5 Y" c7 _. p6 Z, [BEGIN! G  _# u6 w% X6 m
  INSERT .../ m5 b- q7 a8 D" P( v
END( F% w/ y3 \& V3 T) H! `1 y
…因为IF EXISTS它将在到达匹配的第一行后立即返回。
2 M# P3 m9 y) W我不建议@@ROWCOUNT仅使用它,因为您每次都必须实现(忽略)整个结果集。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则