如果@参数=NULL,则选择所有行。

问题描述 投票:0回答:1

我有一个带参数的存储过程。@PolicySymbol,它可以接受多个值。为此,我使用了一个拆分字符串函数。StringOfStringsToTable

如果用户选择 @ControlNo那么我想把这个数据 controlNo 无论为 @PolicySymbol.

如果 @PolicySymbol = NULL 我想把所有的数据带到 controlNo 无论它与什么政策符号有关。

下面是代码示例。

CREATE TABLE #Test (ControlNo int, policy_symbol varchar(50))

INSERT INTO #Test 
VALUES (1111, 'CSE'), (2222, 'PRE'), (3333, 'CSE'), (4444, 'GLG'),
       (4444, 'PRE'), (4444, 'GLS') 

DECLARE 
    @ControlNo int = 1111,
    @PolicySymbol varchar(50) = NULL 

SELECT DISTINCT ControlNo, policy_symbol
FROM #Test
WHERE ControlNo = COALESCE(@ControlNo, ControlNo)
 -- here, if parameter @PolicySymbol IS NULL I want to include all policy symbols
  AND policy_symbol IN (SELECT String FROM [dbo].[StringOfStringsToTable] (@PolicySymbol, ','))

DROP TABLE #Test
sql-server tsql sql-server-2017
1个回答
3
投票

一个简单的,有逻辑的 OR 确实如此。

WHERE ControlNo = COALESCE(@ControlNo, ControlNo)
-- If parameter @PolicySymbol IS NULL I want to include all policy symbols
AND (
    @PolicySymbol IS NULL
    OR policy_symbol IN (SELECT String FROM [dbo].[StringOfStringsToTable] (@PolicySymbol,','))
)
© www.soinside.com 2019 - 2024. All rights reserved.