SQL - 根据任一参数可为空的参数检索记录
SQL - Retrieve records based on parameters where either parameter can be null
我有一个存储过程,它接受五个参数,其中两个可以为空 - 我们将这些参数称为 A 和 B
我想做的是select条记录,按照下面的逻辑
如果参数 A 为 NULL,则只有 return 条记录匹配参数 B
我知道我可以做类似下面的事情
IF A IS NULL
BEGIN
SELECT * FROM TABLE WHERE Param=B
END
ELSE
BEGIN
SELECT * FROM TABLE WHERE Param=A
END
但是,SQL 查询比上面的查询复杂得多,而且 Proc 中会有大量复制,这是我想避免的事情
提前致谢
=================================
编辑 - 抱歉,我应该提到示例中的参数基于单独的列,例如
我的 table 由四列组成,其中两个单独的列映射到两个参数 - 下面的基本架构
编号
人名
群号
交货ID
在我的程序中,我想检索那些与 GroupID 匹配的记录,但是 在 GroupID 为空的情况下,我想 return 那些匹配的记录DeliveryID
再次感谢
尝试 ISNULL 函数:
SELECT * FROM TABLE WHERE Param = ISNULL(B,A)
尝试
SELECT * FROM my_table WHERE Param = COALESCE(A,B)
COALESCE
如果它不为空,将给你 A
。否则 B
.
您还可以使用 case 语句 Case when A is Null Then B
从功能上讲,像这样的东西应该可以工作。如果其中一个参数是 NULL
,则条件变为自我标识(假设 groupID
和 deliveryID
都不为 NULL)。
SELECT *
FROM table_name
WHERE groupID = coalesce(@groupIDParameter, groupID)
AND deliveryID = coalesce(@deliveryIDParameter, deliveryID)
我有一个存储过程,它接受五个参数,其中两个可以为空 - 我们将这些参数称为 A 和 B
我想做的是select条记录,按照下面的逻辑
如果参数 A 为 NULL,则只有 return 条记录匹配参数 B
我知道我可以做类似下面的事情
IF A IS NULL
BEGIN
SELECT * FROM TABLE WHERE Param=B
END
ELSE
BEGIN
SELECT * FROM TABLE WHERE Param=A
END
但是,SQL 查询比上面的查询复杂得多,而且 Proc 中会有大量复制,这是我想避免的事情
提前致谢
=================================
编辑 - 抱歉,我应该提到示例中的参数基于单独的列,例如
我的 table 由四列组成,其中两个单独的列映射到两个参数 - 下面的基本架构
编号 人名 群号 交货ID
在我的程序中,我想检索那些与 GroupID 匹配的记录,但是 在 GroupID 为空的情况下,我想 return 那些匹配的记录DeliveryID
再次感谢
尝试 ISNULL 函数:
SELECT * FROM TABLE WHERE Param = ISNULL(B,A)
尝试
SELECT * FROM my_table WHERE Param = COALESCE(A,B)
COALESCE
如果它不为空,将给你 A
。否则 B
.
您还可以使用 case 语句 Case when A is Null Then B
从功能上讲,像这样的东西应该可以工作。如果其中一个参数是 NULL
,则条件变为自我标识(假设 groupID
和 deliveryID
都不为 NULL)。
SELECT *
FROM table_name
WHERE groupID = coalesce(@groupIDParameter, groupID)
AND deliveryID = coalesce(@deliveryIDParameter, deliveryID)