包含名字的sql搜索查询应首先在搜索中

时间:2014-09-22 13:23:56

标签: sql asp.net sql-server-2008

我有一个包含以下数据的员工表

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

我想从员工表中搜索姓名。 我的查询是

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

现在我在文本框中搜索A然后它首先显示Darshan,Haresh ..在Ashvin之前..

我的问题是,如果我在文本框上按A,那么首先记录sholud是Ashin,而不是Darshan,Haresh,......会来......

所以请建议我查询一下。

2 个答案:

答案 0 :(得分: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);
    

答案 1 :(得分:0)

当涉及到查询时,它们(大部分)将(大部分)完全按照您指定的方式返回数据,但会根据物理数据在表中的排序方式进行排序(通常使用聚簇索引)。

在您的情况下,我不认为您添加了聚簇索引,这可能意味着数据存储在堆中。这基本上意味着SQL Server将以不可预测的方式返回数据。现在返回数据的顺序可能会在将来发生变化,这意味着您最终可能会抱怨用户可能会抱怨数据正在关闭" off"。

如果您希望在排序顺序上获得可预测的结果,请始终使用ORDER BY子句。

在您的情况下,这将是要使用的完整查询:

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

在这种情况下,ASC提示结果应按升序(A-Z)顺序排序。如果您想以相反的方式完成它(Z-A),请使用DESC代替ASC