1

我正在尝试使用一个名为的存储过程GetCompanies和一个名为的参数@ShowCompaniesWithoutClients,以显示所有公司(来自名为 的表CompanyClient列在哪里NULL或为空('')。

目前我找到的解决方案是在我命令IF/ELSE验证的地方发表声明IF @ShowCompaniesWithoutClients=1

SELECT *  
FROM [Company] 
WHERE [Client] IS NULL OR [Client] = ''

否则,选择所有列(无限制)。

谁能帮我重构这个解决方案,用我不需要SELECT声明两次的解决方案替换它?

免责声明:这只是一个实际应用的例子,我有大约 20 列和更多参数。

4

1 回答 1

2

所以@ShowCompaniesWithoutClients as bit可以有 3 个可能的值,0、1 和 null。0 和 1 很清楚,但是当您通过 @ShowCompaniesWithoutClients = null 表示所有内容都应返回时,您可以这样做:

SELECT * 
FROM [Company] 
WHERE  (ISNULL([Client],'') = ''  and @ShowCompaniesWithoutClients  = 1)
    OR (ISNULL([Client],'') <> '' and @ShowCompaniesWithoutClients  = 0)
    OR (@ShowCompaniesWithoutClients IS NULL)
于 2021-03-11T15:33:51.590 回答