如果过滤表中没有记录,如何从表中返回所有记录

时间:2013-09-17 02:16:00

标签: sql sql-server tsql sql-server-2005

我在前端有一个多选框,用户可以从中选择多个客户名称。我让系统将用户选择的客户名称保存到另一个表中,然后使用IN运算符使用此过滤器表中的值从其他表中提取记录。如果用户没有选择客户名称(因此没有记录保存到过滤表中),那么我想返回所有记录。我尝试了很多不同的方法,但无法让它正常工作。在CASE子句中使用WHERE语句似乎根本不起作用。

要显示一个非常简化的版本(我的实际代码从几个不同的表中收集数据), 下面是根据tmp_CustShipments中的过滤器列表从表tbl_CustSelect返回数据的代码。它在用户进行选择时有效。

但是,当用户没有选择时,我想返回tmp_CustShipments表中的所有记录。 我如何实现这一目标?

如果使用(IF ... ELSE ...),则系统似乎期望“into”部分使用不同的表名,否则SQL将返回错误,表示该表已存在。这将使它非常混乱,因为结果集必须用作后续查询中进一步,更复杂计算的输入。

SELECT a.*   
into #qry_ShipStat
FROM #tmp_CustShipments a
WHERE a.CustName IN (SELECT Cust FROM dbo.tbl_CustSelect)

如果可以,请帮忙。非常感谢你。

1 个答案:

答案 0 :(得分:3)

尝试添加NOT EXISTS子句。

SELECT a.*   
into #qry_ShipStat
FROM #tmp_CustShipments a
WHERE a.CustName IN (SELECT Cust FROM dbo.tbl_CustSelect)
OR NOT EXISTS (SELECT Cust FROM dbo.tbl_CustSelect)