我不确定这是可能的,但这是我正在尝试做的事情:在下面的where子句中它工作正常,但现在我需要以某种方式:
如果@Contact的值为'Steve'但是'Steve'在联系中不存在我想返回联系人为空的记录。
我怎样才能实现这一目标?
WHERE (contact = @Contact OR (contact IS NULL AND @Contact IS NULL))
答案 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