Sql server Where子句中的T-SQL变量
在这种情况下,我想返回公司ABC。。。联系人为空。当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的特殊之处
@Contact
为空时,它不会返回任何内容。或者任何变量。想法
DECLARE @Customer NVARCHAR(40) = 'ABC Company',
@Contact NVARCHAR(40) = NULL
SELECT
Company
FROM
company
WHERE
contact = @Contact AND customer = @Customer
谢谢,
EBNULL的特殊之处在于它表示未知 已知值(触点)永远不能等于未知值。您需要一个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')
建议阅读