【发布时间】:2021-08-10 01:18:33
【问题描述】:
下一行返回表中包含这些成分的所有 ID。
SELECT DISTINCT RecID
FROM ingr
WHERE Ingredient IN ('rice', 'salt', 'pepper')
但是,如果我将其放入存储过程中,它就不起作用了...
第一个问题是我无法传递 '(撇号),所以我不得不使用另一个字符,这就是我替换它的原因。
DECLARE @IngList nvarchar(255)
SET @IngList = replace('(|rice|,|salt|,|pepper|)','|','''')
-- select @inglist -> Result: 'rice','salt','pepper'
SELECT DISTINCT RecID
FROM ingr
WHERE Ingredient IN (@IngList)
结果什么都不是——为什么?
【问题讨论】:
-
嗯 -
IN运算符期望使用 值列表 - 但是,您只是提供一个简单的单个字符串(包含多个值 - 但是它仍然只是一个字符串)。根据您使用的 RDBMS - 您需要 某种方式 将作为参数传递的字符串分解为IN运算符的值列表 - 或更改存储过程以获得开始的基于列表的参数。但这完全非常依赖您使用的是什么具体的RDBMS -SQL只是查询语言,它并没有告诉我们您使用的是什么,真的.... -
我使用的是 MSSQL 最新版本。
-
然后要么在你的字符串参数上使用
STRING_SPLIT,要么签出table-valued parameters来传入多个值(适合IN) -
显然不够聪明,无法弄清楚,所以我将创建一个动态查询...
标签: sql sql-server csv tsql search