【发布时间】:2019-07-30 23:05:56
【问题描述】:
我有一个存储过程,需要按以逗号分隔的列表(即'1,2,3')形式传递的 id 列表进行过滤。
我想应用一个 WHERE IN 子句来匹配这些 ID,但前提是变量包含任何内容 (IS NOT NULL AND <> '')。
这是一个简化的问题:http://sqlfiddle.com/#!18/5f6be/1
它目前适用于单个和多个 ID。但是当传递 '' 或 NULL 时,它应该返回所有内容,但它没有返回任何内容。
CTE 和分页的东西是有原因的,请提供一个不会改变它的解决方案。
【问题讨论】:
-
我强烈建议摆脱
CSVToTable函数(使用WHILE)并使用数据集方法;例如 XML 拆分器或计数表拆分器(如delimitedsplit8K_(lead))。 -
如果你真的想了解这方面的一切,这里是典型的答案:Erland Sommarskog's Dynamic Search Conditions in T‑SQL
标签: sql sql-server azure-sql-database sql-server-2016 where-in