2014-09-22 137 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