如何在WHERE
子句中包含输入参数但如果该参数为空则排除它?
我相信有许多方法,但我似乎想不起来了。
我可以使用COALESCE()
吗?但我认为这只用于选择值?
编辑
为了澄清,假设有一个名为@code ="1"
的变量,然后我的WHERE
会是Where type='B' AND code = @code
,但如果@code为null
,那么我只想要Where type='B'
- 注意缺少的code = @code
。
如何在WHERE
子句中包含输入参数但如果该参数为空则排除它?
我相信有许多方法,但我似乎想不起来了。
我可以使用COALESCE()
吗?但我认为这只用于选择值?
为了澄清,假设有一个名为@code ="1"
的变量,然后我的WHERE
会是Where type='B' AND code = @code
,但如果@code为null
,那么我只想要Where type='B'
- 注意缺少的code = @code
。
where some_column = IsNull(@yourvariable, 'valueifnull')
编辑:
你在评论中描述的可以像这样完成:
where (@code is null or code = @code)
where some_column = IsNull(@yourvariable, some_column)
,其中 IsNull
函数的第二个参数为 some_column
,以获取所有查询结果而不进行过滤,如果 @yourvariable
为空。 - Rohim Chou这是另一种方法:
SELECT * FROM Thingies WHERE ( @thingId IS NULL OR ThingID = @thingId )
怎么样?
WHERE (Column1 = @Var1 OR @Var1 IS NULL)
AND (Column2 = @Var2 OR @Var2 IS NULL)
我想提供一个解决方案,该方案源自于另一个网站:
SELECT * FROM Thingies
WHERE ThingID = isnull(@ThingId,ThingID)
使用此解决方案,如果用户选择将您的参数设为null
,那么您的查询将返回所有行作为结果。
DECLARE @Parameter int = null;
SELECT * FROM TABLE
WHERE [AlternateID] is not null
AND (@Parameter is not null AND [AlternateID] = @Parameter)
我曾经错误地认为(@Parameter 不是 null 并且 [AlternateID] = @Parameter)
如果 @Parameter 是 null,它将不会成为完整的 WHERE 子句的一部分。但实际上它会导致整个 WHERE 子句返回 false。解决方法如下,需要添加 OR 1=1:
WHERE [AlternateID] is not null
AND (@Parameter is not null AND [AlternateID] = @Parameter OR 1=1)
WHERE [AlternateID] is not null
AND [Partner_Customer_ID] = ISNULL(@Parameter, [Partner_Customer_ID])
我觉得这会有帮助
@id
@name
SELECT [Id],[Name] FROM [Person]
WHERE Id = @id and ISNULL(@name, Name)