是否可以使用查询参数填充IN关键字
Posted
技术标签:
【中文标题】是否可以使用查询参数填充IN关键字【英文标题】:Is it possible to use query parameters to fill the IN keyword 【发布时间】:2009-02-26 10:14:43 【问题描述】:想象一个以 GUID 作为主键的表。我想根据它们的主键选择其中一些行。我想使用如下查询:
SELECT * FROM mytable WHERE id IN ('firstguidhere','secondguidhere');
我正在使用 ADO.NET 来查询数据库,所以我想使用参数化查询而不是动态 sql,这显然可以工作,但我想保留参数化查询的好处(安全性、转义等)。 ..)。
是否可以使用 sql 参数填充 IN 子句的集合?
【问题讨论】:
这里有一个重复的问题...找到它... ***.com/questions/337704/… @Jon,该问题的公认答案并不是最佳答案,尽管这是我自己多次使用过的一种技巧,对于较小的表和/或不常见的查询来说很好。 @jon,感谢您指出另一个问题。我搜索了,但没有找到那个问题。我考虑使用动态生成参数化查询的第二个答案。我认为这个问题已经结束。有人能做到吗? 【参考方案1】:您可以将 GUID 列表作为逗号分隔的字符串参数传递,并使用表值 UDF 将它们拆分为一个表以在您的 IN
子句中使用:
SELECT *
FROM my_table
WHERE id IN (SELECT id FROM dbo.SplitCSVToTable(@MyCSVParam))
Erland Sommarskog 有一个interesting article,其中包含如何使用 UDF 将逗号分隔的字符串拆分为表的示例。
(出于性能原因,您应该确保您的 UDF 是内联表值的,而不是多语句。)
【讨论】:
最近用Sommarskog的文章解决了一个类似的问题。非常适合我们的需求。以上是关于是否可以使用查询参数填充IN关键字的主要内容,如果未能解决你的问题,请参考以下文章
java 中 使用 find_in_set关键字查询mysql,怎么传值?
java 中 使用 find_in_set关键字查询mysql,怎么传值?