【发布时间】:2017-07-24 19:11:12
【问题描述】:
我有一个过程,它接受一个 XML 选项字段数据字符串,并将值存储在临时表中(如果用户传递了任何内容)。
例如,如果用户选择他们想通过Country 和Department 进行搜索,则这些临时表将包含数据,而City 将为空。
我要做的是创建一个where clause,它将使用这些临时表中的数据作为其逻辑。
INSERT INTO @users(QID)
SELECT QID
FROM Employees AS e
WHERE e.AreaID IN ( SELECT AreaID FROM @areas )
AND e.SiloID IN ( SELECT SiloID FROM @silos);
然而,在这种情况下,如果 @silos 为空,我不希望它成为逻辑的一部分,并且应该包含 e.SiloID 为任何内容的数据。
示例:
@区域
1、5、7
@筒仓
空
查询将是:
SELECT QID
FROM Employees
WHERE e.AreaID IN ( SELECT AreaID FROM @areas )
AND e.SiloID = <anything here, we ignore this logic because the temp table was empty>;
【问题讨论】:
-
如果我没记错的话,你在找:
AND (@silos IS NULL OR e.SiloID IN (SELECT SiloID FROM @silos)) -
添加一个变量来存储变量 silo 中的记录数,执行 Santi 上面所说的操作,但使用该变量等于 0 而不是 silos IS NULL。
-
@Santi -
@silos IS NULLIS 在尝试以这种方式使用它时会引发错误。
标签: sql-server tsql stored-procedures sql-server-2012