我在MySQL中编写了一个查询:
select RecordID, AppInstanceID, ID
where RecordID like ?
and((isNull(AppInstanceID) OR AppInstanceID= CASE WHEN COALESCE(?,'') = '' THEN AppInstanceID ELSE ? END)
and(isNull(ID) OR ID= CASE WHEN COALESCE(?,'') = '' THEN ID ELSE ? END)
这给了我Null和Not Null值。
现在,我转向SQL Server 2008。
如何在SQL Server 2008中实现此合并功能。
用户可以在recordId字段中传递%,他应该获取所有数据,无论是null还是非空。
答案 0 :(得分:2)
我不完全确定你的问题是什么,所以这可能是一个答案,但肯定是建议。您可以按如下方式重写where子句:
SELECT RecordID, AppInstanceID, ID
WHERE RecordID LIKE ?
AND (AppInstanceID IS NULL OR AppInstanceID = ISNULL(?, AppInstanceID))
AND (ID IS NULL OR ID = ISNULL(?, ID)
CASE WHEN COALESCE(?,'') = '' THEN ID ELSE ? END
与写作完全相同
COALESCE(?, ID)
CASE
语句完全没必要。 (COALESCE
可以像我上面的代码中那样换成ISNULL
答案 1 :(得分:0)
如果你想要所有的NULL和NOT NULL值你不必在where子句中放置任何东西,只需选择你想要的列,它将返回所有值,无论thery是否为NULL或NOT NULL。
但是如果你使用Like运算符来过滤掉一些结果然后你也想要所有的NULL值你可以做这样的事情。
select RecordID, AppInstanceID, ID
WHERE RecordID like '%'
OR RecordID IS NULL
它将返回RecordID具有某些值的所有行,如您定义的值或NULL值。
答案 2 :(得分:0)
我找到了解决方案。这是它的工作原理。
select RecordID, AppInstanceID, ID
where RecordID like ?
and(AppInstanceID= CASE WHEN COALESCE(?,'') = '' THEN AppInstanceID ELSE ? END)
and(ID= CASE WHEN COALESCE(?,'') = '' THEN ID ELSE ? END)
由于