【问题标题】:Is it possible to use query parameters to fill the IN keyword是否可以使用查询参数填充IN关键字
【发布时间】:2009-02-26 10:14:43
【问题描述】:

想象一个以 GUID 作为主键的表。我想根据它们的主键选择其中一些行。我想使用如下查询:

SELECT * FROM mytable WHERE id IN ('firstguidhere','secondguidhere');

我正在使用 ADO.NET 来查询数据库,所以我想使用参数化查询而不是动态 sql,这显然可以工作,但我想保留参数化查询的好处(安全性、转义等)。 ..)。

是否可以使用 sql 参数填充 IN 子句的集合?

【问题讨论】:

  • 这里有一个重复的问题...找到它...
  • @Jon,该问题的公认答案并不是最佳答案,尽管这是我自己多次使用过的一种技巧,对于较小的表和/或不常见的查询来说很好。
  • @jon,感谢您指出另一个问题。我搜索了,但没有找到那个问题。我考虑使用动态生成参数化查询的第二个答案。我认为这个问题已经结束。有人能做到吗?

标签: c# .net sql-server-2005 ado.net


【解决方案1】:

您可以将 GUID 列表作为逗号分隔的字符串参数传递,并使用表值 UDF 将它们拆分为一个表以在您的 IN 子句中使用:

SELECT *
FROM my_table
WHERE id IN (SELECT id FROM dbo.SplitCSVToTable(@MyCSVParam))

Erland Sommarskog 有一个interesting article,其中包含如何使用 UDF 将逗号分隔的字符串拆分为表的示例。

(出于性能原因,您应该确保您的 UDF 是内联表值的,而不是多语句。)

【讨论】:

  • 最近用Sommarskog的文章解决了一个类似的问题。非常适合我们的需求。
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-22
  • 2013-05-01
  • 1970-01-01
相关资源
最近更新 更多