sql - 存储过程中 IN 关键字的 SQL 问题
问题描述
下一行返回表中包含这些成分的所有 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)
结果什么都不是——为什么?
解决方案
最好使用表变量、临时表或表值参数。这样,您正在执行一个完全基于集合的操作
DECLARE @IngList TABLE (Ingredient nvarchar(255) NOT NULL);
INSERT @IngList (Ingredient)
VALUES ('rice'), ('salt'), ('pepper');
SELECT DISTINCT RecID
FROM ingr
WHERE Ingredient IN (SELECT t.Ingredient FROM @IngList t)
推荐阅读
- iis-10 - 更改时区 IIS10 日志
- python - python表达式的c ++返回类型不清楚
- c - 如何使用 gtk+-3.0 和 C 从图像中创建方形按钮?
- redux - react-router-redux vs connected-react-router for react v4
- r - R:POSIXct 转换失败,尽管设置了本地
- mysql - 在一个表中加入两个用逗号分隔的字符串 id 的表
- java - 删除标题应为菜单项的空间
- android - 尝试从 Activity 访问时,Fragment View 为空
- java - 字符串 replaceAll 不替换 i++;
- javascript - 获取数据属性的 JSON 值,并在特定 DOM 元素中搜索匹配的 Json 键 -> 数据属性