是否可以使用查询参数来填充IN关键字

时间:2009-02-26 10:14:44

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

想象一下将GUID作为主键的表。我想根据主键选择其中一些行。我想使用像:

这样的查询
SELECT * FROM mytable WHERE id IN ('firstguidhere','secondguidhere');

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

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