0

我正在尝试对自己滚动的 ASP/C# gridview 搜索中的一些 SQL 代码进行故障排除。我有一个搜索特定字段的搜索框,但这里的转折是我只想要某一行之后的结果。

在这个数据库中,我有一个序列命令,它会在名为“record_number”的列中为该表中的每个条目自动生成一个数字,并且只需要记录 #500 之后的结果。这些条目是通过不同的页面手动创建的。

现在我的搜索代码如下:

"SelectCommand="SELECT [record_number], [column_a], [column_b], [column_c], [column_d], [column_e], [column_f], [column_g], [column_h], [column_i], [column_j] FROM [schema].[table_name] WHERE record_number >= 500 AND ([column_a] LIKE '%' + @column_a + '%') OR ([column_c] LIKE '%' + @column_c + '%') OR ([column_e] LIKE '%' + @column_e + '%') OR ([column_g] LIKE '%' + @column_g + '%') OR ([column_h] LIKE '%' + @column_h + '%') OR ([column_j] LIKE '%' + @column_j + '%')"

如果需要或其他任何内容,我可以发布我的 SelectParameters。我面临的挑战是,当我利用此代码仅搜索字母“c”时,发布的结果的 record_number 小于且大于 500。此时我正在旋转我的轮子没有看到问题出在哪里。

如果群众需要更多信息,请告诉我。

编辑

忘记了这部分-我尝试过移动命令并合并命令,但没有成功。

4

2 回答 2

0

您是否尝试过将查询中的所有 OR 语句包装在 () 中?它几乎看起来好像正在将其读取为:

(record_number >= 500 AND ([column_a] LIKE '%' + @column_a + '%')) OR ([column_e] LIKE '%' + @column_e + '%') OR ([column_g] LIKE '%' + @column_g + '%') OR ([column_h] LIKE '%' + @column_h + '%') OR ([column_j] LIKE '%' + @column_j + '%') 

而不是:

record_number >= 500 AND (([column_a] LIKE '%' + @column_a + '%') OR ([column_e] LIKE '%' + @column_e + '%') OR ([column_g] LIKE '%' + @column_g + '%') OR ([column_h] LIKE '%' + @column_h + '%') OR ([column_j] LIKE '%' + @column_j + '%'))

不同之处在于它将 >= 500 加上 column_a 的第一个语句作为一个条件,在这种情况下,其他条件也可以为真,从而导致结果为 record_number < 500。

不确定这是否是您的问题,但我会试一试。

于 2013-06-12T01:21:42.020 回答
0

我的问题在数据库管理员板上得到了解答。我的 OR 子句破坏了查询。

于 2013-06-14T17:06:37.187 回答