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

首頁 > 開發 > 綜合 > 正文

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

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


  另外一個選擇是讓查詢以參數的形式接收一個列名字。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數據類型)轉換成一個整數值——當然,這個操作是不可能成功的。出現錯誤的原因在于,按照“數據類型優先級”規則,case表示式中最高優先級的數據類型決定了表達式返回值的數據類型。“數據類型優先級”規則可以在sql server books online(bol)找到,它規定了int數據類型的優先級要比nvarchar數據類型高。前面的代碼要求sql server按照companyname排序輸出,companyname是nvarchar數據類型。這個case表達式的返回值可能是shipperid(int類型),可能是companyname(nvarchar類型),或phone(nvarchar類型)。由于int類型具有較高的優先級,因此case表達式返回值的數據類型應該是int。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 翁牛特旗| 新竹县| 临安市| 金堂县| 二手房| 会宁县| 石首市| 乌兰察布市| 普陀区| 崇左市| 德令哈市| 沐川县| 青海省| 英吉沙县| 汶川县| 峨山| 胶南市| 永州市| 盘山县| 乐平市| 泰来县| 柞水县| 房山区| 林口县| 怀宁县| 曲松县| 屯留县| 博白县| 格尔木市| 乐都县| 盐亭县| 钟祥市| 鄢陵县| 林州市| 玉环县| 鹤山市| 察雅县| 浦城县| 海盐县| 大姚县| 米脂县|