如何参数化一个包含IN
子句的查询,该子句的参数数量是可变的,比如这个?
SELECT * FROM Tags
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
在这个查询中,参数的数量可以是1到5.
我不希望为此(或XML)使用专用存储过程,但如果有特定于SQL Server 2008的优雅方式,我愿意这样做.
如何参数化一个包含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 "%...%"
个查询没有索引.|
、空白或空标签,否则这将不起作用还有其他方法可以做到这一点,有些人可能认为更干净,所以请继续阅读.