2014-09-22 209 views
-1

我有一个像下面SQL搜索查询应先在搜索

Id Name 
1 Yogesh 
2 Darshan 
3 Haresh 
4 Ramesh 
5 Suresh 
6 Ashvin 

我想从员工表中搜索名字一个职员表包含数据。 我的查询是

SELECT Name FROM Client_Master WHERE Name LIKE'%" + txtname.text + "%'"; 

现在我搜索的文本框则显示第一噶大山,Haresh ..Before Ashvin ..

我的问题是,如果我按一个文本框,然后第一个记录sholud是阿信比Darshan后,Haresh,....会来..

所以,请建议我关于此问题的查询。

+1

您是否尝试添加'ORDER BY'子句? 'ORDER BY名称ASC'应该可以做到。 – SchmitzIT 2014-09-22 13:27:43

+0

打我@冲击@SchmitzIT。我没有看到为什么简单的订单就没有做到这一点 – Patrice 2014-09-22 13:28:17

+0

我不认为'Order By'会起作用。如果他输入字母“S”而不是“A”呢?他仍然会得到阿什文第一! – 2014-09-22 13:30:32

回答

0
  1. 使用参数化查询来避免SQL注入。

  2. 如果您想按名称订购,请添加ORDER BY ID

    var cmd = new SqlCommand("SELECT Name FROM Client_Master WHERE Name LIKE'%' + @name +'%' ORDER BY Name"); 
    
    cmd.Parameters.Add("@name ", txtname.text); 
    
+0

如果OP输入“S”,你不觉得Yogesh会出现在Suresh之前吗? – 2014-09-22 13:34:07

+0

不,这是不工作..按ID搜索,而阿什文ID是6,所以它应该显示阿什文最后,而不是第一.. – yogesh 2014-09-22 13:37:14

+0

它应显示什么?我不清楚订单应该是什么? – 2014-09-22 13:43:16

0

当涉及到查询,他们会(大部分)返回的数据完全按照您指定,但排序基于物理数据是如何在表格排序(通常使用聚集索引)。

就你而言,我不认为你增加了一个聚集索引,这可能意味着数据存储在一个堆中。这实际上意味着SQL Server将以不可预知的方式返回数据。它现在返回数据的顺序可能会在未来发生变化,这意味着最终用户可能会抱怨数据“关闭”。

如果要在排序顺序上预测结果,请始终使用ORDER BY子句。

在你的情况,这将是完整的查询使用方法:

SELECT 
    Name 
FROM 
    Client_Master 
WHERE 
    Name LIKE'%" + txtname.text + "%'" 
ORDER BY 
    NAME ASC; 

在这种情况下,ASC暗示的结果应该在升序(A-Z)排序。如果您想以相反的方式完成(Z-A),请使用DESC而不是ASC

+0

如果记录是Jaydeep,Jaydeep patel和Pankaj ...然后我搜索您的查询并在文本框中键入“p”,然后首先记录sholud是Pankaj ..但它显示Jaydeep,Jaydeep patel,然后Pankaj ... pankaj应该是第一个搜索名称.. – yogesh 2014-09-22 13:42:15

+0

@ user1425063 - 但它仍应该显示其他记录以及?或者只有那些以P开头的人? – SchmitzIT 2014-09-22 14:09:17

+0

我想要所有包含'P'的记录,但是首先它应该显示以'P'开始,并且在剩下包含'P'的单词之后... – yogesh 2014-09-23 05:52:32