【发布时间】:2020-05-11 22:19:30
【问题描述】:
我有一个带有参数@PolicySymbol 的存储过程,它可以接受多个值。为此,我使用了拆分字符串函数:StringOfStringsToTable
如果用户选择@ControlNo,那么无论为@PolicySymbol 设置什么值,我都想为controlNo 带来数据。
如果@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
【问题讨论】:
-
另外你应该用
STRING_SPLIT替换[dbo].[StringOfStringsToTable],除非你出于某种原因必须保持古老的兼容性级别。
标签: sql-server tsql stored-procedures sql-server-2017