查询时出现空或多个参数

时间:2014-07-09 16:46:23

标签: sql where-clause

我有一个存储过程,其参数必须采用逗号分隔的 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)

我所知道的不会奏效。还有其他方法吗?

2 个答案:

答案 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安全的。