1

我有一列包含许多行。我正在将值列表传递给方法。我希望返回此列的子字符串包含我要查找的值的所有行。

目前,我正在使用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(")");

有没有更可怕的语法方式来做到这一点?:)

谢谢

4

2 回答 2

2

如果我理解这个问题,那么您可以更轻松地在 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

虽然性能可能不是很好。

于 2012-07-30T09:50:30.090 回答
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 服务器来处理它的更简单的方法。

于 2012-07-30T09:52:39.247 回答