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