Sql server Where子句中的T-SQL变量

Sql server Where子句中的T-SQL变量,sql-server,tsql,Sql Server,Tsql,在这种情况下,我想返回公司ABC。。。联系人为空。当@Contact为空时,它不会返回任何内容。或者任何变量。想法 DECLARE @Customer NVARCHAR(40) = 'ABC Company', @Contact NVARCHAR(40) = NULL SELECT Company FROM company WHERE contact = @Contact AND customer = @Customer 谢谢, EBNULL的特殊之处

在这种情况下,我想返回公司ABC。。。联系人为空。当
@Contact
为空时,它不会返回任何内容。或者任何变量。想法

DECLARE @Customer NVARCHAR(40) = 'ABC Company',
        @Contact NVARCHAR(40) = NULL

SELECT
    Company
FROM
    company
WHERE
    contact = @Contact AND customer = @Customer
谢谢,
EB

NULL的特殊之处在于它表示未知

已知值(触点)永远不能等于未知值。您需要一个OR语句来检查它是否等于或为null

where (contact = @Contact OR (contact is null AND @Contact is null))
and customer = @Customer

可能是这样吧?

NULL的特殊之处在于它表示未知

已知值(触点)永远不能等于未知值。您需要一个OR语句来检查它是否等于或为null

where (contact = @Contact OR (contact is null AND @Contact is null))
and customer = @Customer
也许是这样吧?

你可以写

WHERE
ISNULL(contact,'') = ISNULL(@Contact,'') AND customer = @Customer
这将执行空检查,如果为空,则该值将被视为空字符串进行比较

将执行''='',而不是null==null(这会给出false)

    if(null =null)
        print 'Equal'

    else 
        print 'not equal'
/*******************************************/

    if('' ='')
        print 'Equal'

    else 
        print 'not equal'
你可以写

WHERE
ISNULL(contact,'') = ISNULL(@Contact,'') AND customer = @Customer
这将执行空检查,如果为空,则该值将被视为空字符串进行比较

将执行''='',而不是null==null(这会给出false)

    if(null =null)
        print 'Equal'

    else 
        print 'not equal'
/*******************************************/

    if('' ='')
        print 'Equal'

    else 
        print 'not equal'

在SQL中,应用了三价逻辑。在本文中,您可以详细阅读此类逻辑。底线是,在true和false之间,还有另一个值:
UNKNOWNN
,它(在SQL中)是与
NULL
值进行比较的结果。你可以认为它是假的(在这种情况下)

现在,想象一下:

此查询不会返回任何内容,因为
where
子句的计算结果为
UNKNOWN

select 1 where null = 0
select 1 where null <> 0
select 1 where null = null

不会归还任何东西将某些查询作为正确的操作数时,这一点尤其重要。

在SQL中,应用了三价逻辑。在本文中,您可以详细阅读此类逻辑。底线是,在true和false之间,还有另一个值:
UNKNOWNN
,它(在SQL中)是与
NULL
值进行比较的结果。你可以认为它是假的(在这种情况下)

现在,想象一下:

此查询不会返回任何内容,因为
where
子句的计算结果为
UNKNOWN

select 1 where null = 0
select 1 where null <> 0
select 1 where null = null

不会归还任何东西当您将一些查询作为正确的操作数时,这一点尤其重要。

您无法获得
NULL
重新编码,当您使用
=
时,您无法获得
NULL
重新编码,当您使用
=
时,请在此基础上扩展一点。OR语句的示例?Thanks@EBaze关键是空值不能与任何值进行比较。如果要使2个(或更多)空值相等,则必须对所有比较的值使用“is null”表达式。您不提供上下文,但我猜这是(或将是)用于搜索的存储过程。如果是这样的话,请阅读Erland关于这个主题的讨论。你能详细介绍一下吗。OR语句的示例?Thanks@EBaze关键是空值不能与任何值进行比较。如果要使2个(或更多)空值相等,则必须对所有比较的值使用“is null”表达式。您不提供上下文,但我猜这是(或将是)用于搜索的存储过程。如果是,请阅读Erland关于该主题的讨论。虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。此部分
ISNULL(联系“”)
建议阅读,而此代码可以回答问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。这部分
ISNULL(contact')
建议阅读