我正在处理存储过程,并且希望检查我的表变量以查看是否存在特定字段等于null的零行。换句话说,对于我表中的每一行,此字段都有一个非空值。我想不通过检查count(),而是通过使用EXISTS。SQL:检查某个表是否包含特定列中没有空值
目前我在做这个:
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子句做我想做的事情,但是我找不到它,并忽略它的书签。虽然也许我错了。
我设置一个if/else的原因是因为根据我的理解,EXISTS将在NOT EXISTS之前返回,因为这是一个相当密集的存储过程(很频繁地调用,有时是批量调用),我希望能够保存一些在这里处理。
也许我看着这一切都错了或承担错误的东西。我在这里学习,所以如果我把所有的错误都指向正确的方向。
编辑:显然在这方面没有什么区别(不是where子句/子查询的一部分)。但是假设我在where子句中使用了存在,并且希望检查上面的确切场景(字段中的所有非空值),特别是当有问题的表可能有成千上万行时。 [种新的SO,如果我应该把它作为自己的问题,请让我知道]
的** **所有非空值检查在其中一个主查询的WHERE子句基本上是相同的情况下,因为它只会在每个查询中执行一次。在子查询中检查所有非空值是非常糟糕的主意,因为每次执行子查询时都需要对相关表进行表扫描。 – 2010-11-05 13:58:14