我该如何对包含一个IN带有可变数量参数的子句的查询进行参数化?
IN
SELECT * FROM Tags WHERE Name IN ('ruby','rails','scruffy','rubyonrails') ORDER BY Count DESC
在此查询中,参数的数量可以为1到5之间的任意值。
我不希望对此(或XML)使用专用的存储过程,但是如果有一些特定于SQL Server 2008的优雅方法,我可以接受。
这是我使用的一种快速而又肮脏的技术:
SELECT * FROM Tags WHERE '|ruby|rails|scruffy|rubyonrails|' LIKE '%|' + Name + '|%'
因此,这是C#代码:
string[] tags = new string[] { "ruby", "rails", "scruffy", "rubyonrails" }; const string cmdText = "select * from tags where '|' + @tags + '|' like '%|' + Name + '|%'"; using (SqlCommand cmd = new SqlCommand(cmdText)) { cmd.Parameters.AddWithValue("@tags", string.Join("|", tags); }
两个警告:
LIKE "%...%"
|
有些人可能认为还有其他方法可以做到这一点,因此请保持阅读。