小编典典

参数化SQL IN子句

sql

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

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

在此查询中,参数的数量可以为1到5之间的任意值。

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


阅读 197

收藏
2021-05-05

共1个答案

小编典典

这是我使用的一种快速而又肮脏的技术:

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-05-05