我该如何对包含一个IN带有可变数量的参数的子句的查询进行参数化(例如这样的查询)?
SELECT * FROM Tags WHERE Name IN ('ruby','rails','scruffy','rubyonrails') ORDER BY Count DESC
在此查询中,参数的数量可以在1到5之间的任何位置。
我不希望对此(或XML)使用专用的存储过程,但是如果有一些特定于SQL Server 2008的优雅方法,我可以接受。
这是我使用的一种quick-and-dirty的技术:
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 “%…%”查询未建立索引。 确保您没有任何|,空白或null标记,否则将无法使用