Sql server 查找以逗号分隔的Id'列表中的记录;s的SQL Server

Sql server 查找以逗号分隔的Id'列表中的记录;s的SQL Server,sql-server,join,Sql Server,Join,它有两个这样的表: 200,201,101,103,100,500,501 t\u配方: RecipeId Name InsertDate ---------------------------------------------- 1 Mutton 9/6/2015 0:00 2 Veg Biryani 9/5/2015 0:00 t\u配方成分: RecipeId

它有两个这样的表:

200,201,101,103,100,500,501
t\u配方

RecipeId        Name              InsertDate 
----------------------------------------------
1             Mutton            9/6/2015 0:00
2             Veg Biryani       9/5/2015 0:00
t\u配方成分

RecipeId      IngrId          InsertDate
----------------------------------------------
1             200               9/6/2015 0:00
1             201               9/5/2015 0:00
1             101               9/4/2015 0:00
1             103               9/3/2015 0:00
2             100               9/2/2015 0:00
2             500               9/6/2015 0:00
2             501               9/5/2015 0:00
2             401               9/4/2015 0:00
我有一个存储过程,它在名为
MyIngredientId
的参数中接受以逗号分隔的
IngrId
列表,如下所示:

200,201,101,103,100,500,501
我必须得到所有那些可以从
IngrId
参数创建的配方。像上面的例子一样,可以创建
RecipeId=1
,因为它的所有成分都是
MyIngredientId
参数的一部分,但是
RecipeId=2
不是因为
IngrId=401
不在列表中

我需要像这样的输出:

RecipeId         RecipeName
-----------------------------
1                Mutton

Marc_s说得对,你应该尽可能地使用IN语句,但是如果你想继续使用IN语句,你可以使用以下方法:


Marc_s说得对,你应该尽可能地使用IN语句,但是如果你想继续使用IN语句,你可以使用以下方法:


停止使用那些混乱的逗号分隔列表!他们是一场噩梦,只会带来悲伤。如果您使用的是SQL Server 2008或更高版本,那么使用表值参数类型可以更好、更高效地处理此类情况,而不会带来任何麻烦和麻烦。谢谢@marc查找并回答,删除这些逗号分隔的列表不是问题,我可以删除它们并可以使用表值参数。如果我使用表值参数,请给我发送解决方案。停止使用那些混乱的逗号分隔列表!他们是一场噩梦,只会带来悲伤。如果您使用的是SQL Server 2008或更高版本,那么使用表值参数类型可以更好、更高效地处理此类情况,而不会带来任何麻烦和麻烦。感谢您在@marc查找并回答此问题,删除这些逗号分隔的列表不是问题,我可以删除它们并可以使用table value参数。如果我使用table value参数,您能给我发送解决方案吗?谢谢Fez,如果我使用表值参数,则上述解决方案可以优化或不优化,因为这需要很长时间:-)@ChupChapCharli是的,这可以使用表值参数进行优化。有一个很好的例子说明了如何做到这一点。上述解决方案对您有效吗?虽然我自己解决了,但您的解决方案也很有效:-)谢谢Fez,如果我使用表值参数,则上述解决方案可以优化或不优化,因为这需要一段时间:-@ChupChapCharli是的,这可以使用表值参数进行优化。有一个很好的例子说明了如何做到这一点。上述解决方案对您有效吗?虽然我自己解决了,但您的解决方案也很有效:-)