一尘不染

参数化SQL IN子句

sql

我该如何对包含一个IN带有可变数量的参数的子句的查询进行参数化(例如这样的查询)?

SELECT * FROM Tags 
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC

在此查询中,参数的数量可以在1到5之间的任何位置。

我不希望对此(或XML)使用专用的存储过程,但是如果有一些特定于SQL Server 2008的优雅方法,我可以接受。


阅读 154

收藏
2021-03-08

共1个答案

一尘不染

这是我使用的一种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标记,否则将无法使用

2021-03-08