Sql 如果参数为null,则返回null值,否则返回参数的特定值
我正在创建一个存储过程,其中如果输入参数的值为Null,我必须在“Color”列中返回Null值,如果输入参数为,比如说,“Blue”,我必须返回值为“Blue”的“Color”列。这是我的sql代码:Sql 如果参数为null,则返回null值,否则返回参数的特定值,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在创建一个存储过程,其中如果输入参数的值为Null,我必须在“Color”列中返回Null值,如果输入参数为,比如说,“Blue”,我必须返回值为“Blue”的“Color”列。这是我的sql代码: Create Proc Reports.GetProductsByColor @Color nvarchar(20) AS SET NOCOUNT ON SET ANSI_NULLS OFF BEGIN Select SalesLT.Product.ProductID as ProductID,
Create Proc Reports.GetProductsByColor @Color nvarchar(20)
AS
SET NOCOUNT ON
SET ANSI_NULLS OFF
BEGIN
Select SalesLT.Product.ProductID as ProductID,
SalesLT.Product.Name as 'Name',
SalesLT.Product.ListPrice as Price,
SalesLT.Product.Color as Color,
SalesLT.Product.Size as Size
From SalesLT.Product
Where Color = CASE WHEN @Color is NULL
THEN NULL
ELSE @Color
END
END
GO
Exec Reports.GetProductsByColor 'Blue'
GO
Exec Reports.GetProductsByColor NULL
GO
Exec Reports.GetProductsByColor“蓝色”
工作正常,只显示“蓝色”值。但是,对于Exec Reports.GetProductsByColor NULL
,即使“Color”列中有50个空值,我也不会得到任何结果集。我做错了什么?如有任何反馈,将不胜感激。谢谢:D因为null=null
返回的false
不起作用。使用
Where (@Color is NULL and Color is null)
or (@color = color)
因为
null=null
返回不起作用的false
。使用
Where (@Color is NULL and Color is null)
or (@color = color)
试试这个:
where ISNULL(Color,'-') =IsNUll(@Color,'-')
请注意,以下WHERE子句不是SARG,如果可用,将不会使用颜色列的关联索引
要解决SARG问题,您需要使用尝试以下方法:
where ISNULL(Color,'-') =IsNUll(@Color,'-')
请注意,以下WHERE子句不是SARG,如果可用,将不会使用颜色列的关联索引
要解决特区政府的问题,您需要使用@juergend是的,我在回答中提到了这个性能问题,这就是为什么我提到您的性能回答improvement@juergend对我在回答中提到了这个性能问题,这就是为什么我引用了您的性能回答improvement@PinkPrint如果答案解决了你的问题,你应该接受它,这样其他人就会知道问题已经解决。@PinkPrint如果答案解决了你的问题,你应该接受它,这样其他人就会知道知道问题已经解决了。