2009-02-26 86 views
3

想象一下以GUID作为主键的表。我想根据主键选择其中的一些行。我想用类似的查询:是否可以使用查询参数填充IN关键字

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

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

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

+0

这里有一个重复的问题...某处找到它...... – 2009-02-26 10:17:59

+1

的http:// stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause – 2009-02-26 10:18:48

回答

5

你可以通过GUID列表作为一个逗号分隔的字符串参数,并使用表值UDF将它们分成表中的IN子句中使用:

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

厄兰Sommarskog有interesting article以及如何使用UDF将逗号分隔的字符串拆分为表的示例。

(出于性能考虑,你应该确保你的UDF是联表值,而不是多语句)。

相关问题