我有一个包含许多行的列。我将一个值列表传递给方法。我希望返回此列的子字符串包含我要查找的值的所有行。
目前,我正在使用CHARINDEX
来检查单个子字符串,并在每个后续子字符串上附加OR CHARINDEX
。这很麻烦,我相信你可以欣赏。
所以,此刻,我有:
[Long SQL query]...
queryString.Append(string.Format(" (AND CHARINDEX( '{0}', Table.Column ) > 0 ", ListOfValues[0]));
foreach (string value in ListOfValues)
{
queryString.Append(string.Format("OR CHARINDEX( '{0}', Table.Column ) > 0 ", value));
}
queryString.Append(string.Format(")AND CHARINDEX( '{0}', Table.Column) > 0)"));
queryString.Append(")");
是否有更少的语法恐怖方式来做到这一点? :)
由于
答案 0 :(得分:1)
如果我理解了这个问题,那么你可以更容易地在SQL端做到这一点。
Select MyColumn
From MyTable
Where MyColumn Like '%MySubstringText%'
显然,如果你的子字符串要改变,你需要动态创建SQL语句。
编辑:
如果您有多个可能的子字符串,那么您可以使用值列表填充表,然后交叉连接这两个表并使用CharIndex进行过滤。
Create table MySubstrings
(
MySubstring nvarchar(100) not null
)
Select t.MyColumn
From MyTable t, MySubstrings s
Where CharIndex(s.MySubstring, t.MyColumn) > 0
虽然表现可能并不好。
答案 1 :(得分:0)
首先,将字符串放入这样的SQL查询中是非常危险的!如果您不注意,则打开SQL应用程序http://en.wikipedia.org/wiki/SQL_injection。
现在回答:
queryString.Append(string.Format(" Table.Column LIKE '%{0}%' ", ListOfValues[0]));
要避免SQL注入,请尝试改为:
command.Parameters.AddWithValue("@ParamX","%" + value + "%");
由于我们在这里进行字符串比较,我想不出用SQL服务器处理它的方法不那么混乱。