国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

數據庫查詢結果的動態(tài)排序(2)

2024-07-21 02:30:58
字體:
來源:轉載
供稿:網友
二、用列名字作為參數


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



【Listing 2:用列名字作為參數,第一次嘗試】


CREATE PROC GetSortedShippers

@ColName AS sysname

AS


SELECT *

FROM Shippers

ORDER BY

CASE @ColName

WHEN 'ShipperID' THEN ShipperID

WHEN 'CompanyName' THEN CompanyName

WHEN 'Phone' THEN Phone

ELSE NULL

END





  現在,我們來試一下新的存儲過程,以參數的形式指定ShipperID列:



EXEC GetSortedShippers 'ShipperID'





  此時一切正常。但是,當我們視圖把CompanyName列作為參數調用存儲過程時,它不再有效:



EXEC GetSortedShippers 'CompanyName'





  仔細看一下錯誤信息:



Server: Msg 245, Level 16, State 1, Procedure GetSortedShippers, Line 5

Syntax error converting the nvarchar value 'Speedy

Express' to a column of data type int.





  它顯示出,SQL Server試圖把“Speedy Express”(nvarchar數據類型)轉換成一個整數值——當然,這個操作是不可能成功的。出現錯誤的原因在于,按照“數據類型優(yōu)先級”規(guī)則,CASE表示式中最高優(yōu)先級的數據類型決定了表達式返回值的數據類型。“數據類型優(yōu)先級”規(guī)則可以在SQL Server Books Online(BOL)找到,它規(guī)定了int數據類型的優(yōu)先級要比nvarchar數據類型高。前面的代碼要求SQL Server按照CompanyName排序輸出,CompanyName是nvarchar數據類型。這個CASE表達式的返回值可能是ShipperID(int類型),可能是CompanyName(nvarchar類型),或Phone(nvarchar類型)。由于int類型具有較高的優(yōu)先級,因此CASE表達式返回值的數據類型應該是int。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 共和县| 荣成市| 乌兰浩特市| 航空| 鄂州市| 商丘市| 喀喇沁旗| 犍为县| 平阳县| 浦东新区| 长宁县| 西城区| 平远县| 太保市| 章丘市| 花莲市| 云龙县| 延安市| 五原县| 福泉市| 东兴市| 鹤壁市| 麻江县| 瑞安市| 永川市| 武乡县| 保康县| 禹州市| 呈贡县| 旬阳县| 子洲县| 武安市| 二连浩特市| 定边县| 镇安县| 平和县| 宝应县| 蒙山县| 内江市| 松滋市| 大渡口区|