SQL Server 2016 - 使用存储过程从 table 获取 NULL 值
SQL Server 2016 - Get NULL values from a table using a Stored Procedure
我正在尝试使用名为 GetCompanies
的存储过程和名为 @ShowCompaniesWithoutClients
的参数来显示所有公司(来自名为 Company
的 table),其中Client
列是 NULL
或空的 (''
)。
目前我找到的解决方案是制作一个 IF/ELSE
语句,其中验证 IF @ShowCompaniesWithoutClients=1
我命令
SELECT *
FROM [Company]
WHERE [Client] IS NULL OR [Client] = ''
否则,select 所有列(无限制)。
谁能帮我重构这个解决方案,用不需要 SELECT
声明两次的解决方案替换它?
免责声明:这只是实际应用的示例,我有大约 20 列和更多参数。
所以 @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)
我正在尝试使用名为 GetCompanies
的存储过程和名为 @ShowCompaniesWithoutClients
的参数来显示所有公司(来自名为 Company
的 table),其中Client
列是 NULL
或空的 (''
)。
目前我找到的解决方案是制作一个 IF/ELSE
语句,其中验证 IF @ShowCompaniesWithoutClients=1
我命令
SELECT *
FROM [Company]
WHERE [Client] IS NULL OR [Client] = ''
否则,select 所有列(无限制)。
谁能帮我重构这个解决方案,用不需要 SELECT
声明两次的解决方案替换它?
免责声明:这只是实际应用的示例,我有大约 20 列和更多参数。
所以 @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)