代码之家  ›  专栏  ›  技术社区  ›  pinkfloydx33

SQL:检查表是否在特定列中不包含空值

  •  1
  • pinkfloydx33  · 技术社区  · 14 年前

    我正在处理一个存储过程,有一次我想检查我的表变量,看看是否有一个特定的字段为空的零行。换句话说,对于表中的每一行,此字段都有一个非空值。我不想通过检查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子句中使用存在,并且希望检查上面的确切场景(字段中的所有非空值),特别是当所讨论的表可能有数千行时。[有点生疏,如果我把这个作为自己的问题发表,请告诉我]

    2 回复  |  直到 14 年前
        1
  •  3
  •   gbn    14 年前

    此格式中的EXISTS或NOT EXISTS将在找到行并根据需要给出true/false时停止。

    国际单项体育联合会将相应地跳,这里没有太多的优化。。。

        2
  •  0
  •   Marcelo Cantos    14 年前

    NOT EXISTS EXISTS 应该花同样的时间。一个可以通过首先计算另一个并否定结果而得到。