我有一个存储过程,其参数必须采用逗号分隔的 varchar值列表,这些值可以转换为值表,也可以是NULL
,例如< / p>
@Values VARCHAR(10) = NULL
OR
@Values VARCHAR(10) = '1,5,10'
IF OBJECT_ID('TEMPDB..#Parameters') IS NOT NULL DROP TABLE #Parameters
CREATE TABLE #Parameters ( Id INT )
INSERT INTO #Parameters
SELECT
[Value]
FROM
FunctionThatReturnsStringToTable(',',@Values)
我需要弄清楚如何在SQL中使这个工作
SELECT
SomeColumns
FROM
TABLE
WHERE
COLUMN = IIF(@Values IS NULL, COLUMN, (SELECT Id FROM #Parameters)
我所知道的不会奏效。还有其他方法吗?
答案 0 :(得分:0)
以这种方式检查null参数:
WHERE
@Values IS NULL OR
COLUMN IN (SELECT Id FROM #Parameters)
答案 1 :(得分:0)
使用快速执行的表值函数而不是临时表。不必测试临时表的存在并将其丢弃。
http://sqlperformance.com/2012/07/t-sql-queries/split-strings
我选择XML分割功能。以下示例来电。
-- A table of items
DECLARE @Values VARCHAR(10) = '1,5,10'
SELECT Item FROM [dbo].[SplitStrings_XML](@values, ',')
-- Empty Set
DECLARE @Values VARCHAR(10) = NULL
SELECT Item FROM [dbo].[SplitStrings_XML](@values, ',')
将您的代码更改为以下内容。
-- Can be an empty or valued list.
WHERE
COLUMN IN (SELECT Item FROM [dbo].[SplitStrings_XML](@values, ','))
总之,这假设您的数据是XML安全的。