程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 數據庫查詢結果的動態排序(目錄)

數據庫查詢結果的動態排序(目錄)

編輯:關於SqlServer
在網絡數據庫編程過程中,常常遇到查詢數據的請求而查詢出來的結果往往又要作出各種各樣的動態排序。能否處理得好動態排序,這體現一個數據庫編程人員技術水平高與低。一個經常出現的問題是“怎樣才能根據傳遞給存儲過程的參數返回一個排序的輸出?”。仙人掌工作室為此整理出了這個問題的幾種解決方案。 方案如下:

一、用IF...ELSE執行預先編寫好的查詢

  對於大多數人來說,首先想到的做法也許是:通過IF...ELSE語句,執行幾個預先編寫好的查詢中的一個。例如,假設要從Northwind數據庫查詢得到一個貨主(Shipper)的排序列表,發出調用的代碼以存儲過程參數的形式指定一個列,存儲過程根據這個列排序輸出結果。

二、用列名字作為參數

  另外一個選擇是讓查詢以參數的形式接收一個列名字。Listing 2顯示了修改後的GetSortedShippers存儲過程。CASE表達式根據接收到的參數,確定SQL Server在ORDER BY子句中使用哪一個列值。注意,ORDER BY子句中的表達式並未在SELECT清單中出現。在ANSI SQL-92標准中,ORDER BY子句中不允許出現沒有在SELECT清單中指定的表達式,但ANSI SQL-99標准允許。SQL Server一直允許這種用法。

三、用列號作為參數

  就象第一個方案所顯示地那樣,你也許更喜歡用列的編號作為參數,而不是使用列的名字(列的編號即一個代表你想要作為排序依據的列的數字)。這種方法的基本思想與使用列名字作為參數的思想一樣:CASE表達式根據指定的列號確定使用哪一個列進行排序。

四、動態執行

  使用動態執行技術,我們能夠更輕松地編寫出GetSortedShippers存儲過程。使用這種方法時,我們只需動態地構造出SELECT語句,然後用EXEC()命令執行這個SELECT語句。

五、用戶定義函數

  如果你使用的是SQL Server 2000,想要編寫一個用戶定義的函數(UDF),這個用戶定義函數接受列的名字或編號為參數、返回排序的結果集,Listing 10顯示了大多數程序員當成第一選擇的方法。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved