首页 > 解决方案 > 存储过程中 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)

结果什么都不是——为什么?

标签: sqlsql-servercsvtsqlsearch

解决方案


最好使用表变量、临时表或表值参数。这样,您正在执行一个完全基于集合的操作

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)

推荐阅读