如何参数化包含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 "%...%"
|
还有其他方法可以实现这一点,有些人可能会认为更清洁,所以请继续阅读。