条款返回空记录的地方

时间:2018-04-05 20:33:10

标签: sql-server tsql where-clause

我不确定这是可能的,但这是我正在尝试做的事情:在下面的where子句中它工作正常,但现在我需要以某种方式:

如果@Contact的值为'Steve'但是'Steve'在联系中不存在我想返回联系人为空的记录。

我怎样才能实现这一目标?

WHERE (contact =  @Contact OR (contact IS NULL AND @Contact IS NULL))

3 个答案:

答案 0 :(得分:3)

一种方法使用子查询。不使用子查询的版本是:

select top (1) with ties t.*
from t
where contact = @Contact or contact is null
order by contact desc;

答案 1 :(得分:0)

我猜测你到底发生了什么,但有一种可能是这样的吗?

select * from someTable t
where 1 = 
   (case when exists(select * from someTable t2 where t2.contact = @contact) 
    then 
        case when @contact = t.contact then 1 end
    else 
        case when t.contact IS NULL then 1 end
    end)

这意味着:

如果someTable中至少存在一行,其中someTable.contact = @contact, 然后返回someTable.contact = @contact所有的行。 否则,返回someTable.contact IS NULL的所有行。

答案 2 :(得分:0)

如果将其设置为存储过程,则可以将默认值设置为空白,然后在WHERE语句中使用它。下面是一个来自工作过程的伪示例。它使用Full-Text Index,但你明白了。

  CREATE PROCEDURE [dbo].[procMyProc]

      @p_searchtermKeyword NVARCHAR(255) = '""'

  AS
  BEGIN

  SET NOCOUNT ON;

    SELECT *
    FROM MyTable
    WHERE ((CONTAINS(Keywords, @p_searchtermKeyword)) OR  @p_searchtermKeyword = '""') 

  END