小编典典

参数化 SQL IN 子句

all

如何参数化包含IN具有可变数量参数的子句的查询,例如这个?

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

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

我不希望为此(或 XML)使用专用的存储过程,但如果有一些特定于SQL Server
2008
的优雅方式,我对此持开放态度。


阅读 118

收藏
2022-02-28

共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 "%...%"查询未编入索引。
  • 确保您没有任何|、空白或空标签,否则这将不起作用

还有其他方法可以实现这一点,有些人可能会认为更清洁,所以请继续阅读。

2022-02-28