我正在处理一个存储过程,有一次我想检查我的表变量,看看是否有特定字段等于空的零行。换句话说,对于我表中的每一行,该字段都有一个非空值。我不想通过检查 count() 来做到这一点,而是通过使用 EXISTS。
目前我正在这样做:
IF EXISTS ( SELECT * FROM @sometable where somefield IS NULL )
SET @somefield = @somefield /* just a way to skip this */
ELSE
/* perform some logic */
现在我知道我可以使用 NOT EXISTS,但我认为 NOT EXISTS 比 EXISTS 慢得多。我发誓我最近读过一些东西(我认为是这样),其中有一个例子,说明如何用一个 Exists 子句做我想做的事情,但我找不到它并且忽略了为它添加书签。虽然也许我错了。
我设置 if/else 的原因是因为据我了解 EXISTS 将在 NOT EXISTS 之前返回,并且由于这是一个非常密集的存储过程(非常频繁地调用,有时是批量调用),我希望在这里节省一些处理。
也许我认为这一切都是错误的,或者假设某些事情不正确。我是来学习的,所以如果我错了,请指出我正确的方向。
编辑:显然在这种情况下没有区别(不是 where 子句/子查询的一部分)。但是假设我在 where 子句中使用了存在,并且想要检查上面的确切情况(字段中的所有非空值),特别是当有问题的表可能有数千行时。[对 SO 有点陌生,如果我应该将此作为自己的问题发布,请告诉我]