全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3192
推到 Plurk!
推到 Facebook!

store procedure 變數控制排序

答題得分者是:老大仔
heart75047
一般會員


發表:9
回覆:13
積分:19
註冊:2010-05-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-04-16 17:36:57 IP:211.20.xxx.xxx 訂閱
在store procedure 想要透過 輸入變數 控制 輸出的表的 order 升序 或 降序
以前是用 字串 組合SQL語法 最後只要 if ... SET @SQL=@SQL 'DESC ' else 'ASC' 類似這樣 就好
現在輸出換成暫存表 只能這樣寫

[code sql]
if @group= 0
begin
if @order_cust_rank = 0
begin
if @order_year = 0
select * from @M_Table order by F_Year DESC,rank DESC
if @order_year = 1
select * from @M_Table order by F_Year ASC,rank DESC
end
if @order_cust_rank = 1
begin
if @order_year = 0
select * from @M_Table order by F_Year DESC,rank ASC
if @order_year = 1
select * from @M_Table order by F_Year ASC,rank ASC
end
if @order_cust_rank = 2
begin
if @order_year = 0
select * from @M_Table order by F_Year DESC,cust_code DESC
if @order_year = 1
select * from @M_Table order by F_Year ASC,cust_code DESC
end
if @order_cust_rank = 3
begin
if @order_year = 0
select * from @M_Table order by F_Year DESC,cust_code ASC
if @order_year = 1
select * from @M_Table order by F_Year ASC,cust_code ASC
end
end
...
[/code]
底下if @group= 1 只是把 F_Year 跟 cust_code 順序對換...
請問該如何 縮減這段程式碼 或讓這段程式碼 變得比較容易理解
case 好像只能用在 欄位名稱 用在ASC/DESC不行
爬文說 把暫存表 弄成全域變數 #開頭 就可以
但這是公司 的資料庫我不敢亂動..
資料庫版本 MSSQL 2012
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-04-17 08:28:09 IP:210.61.xxx.xxx 未訂閱
你也可以使用原方式啊...

[code sql]
if @sTYPE = 1
begin
Set @SQLStr = @SQLStr ' Order by NAME ASC '
end
if @sTYPE = 2
begin
Set @SQLStr = @SQLStr ' Order by QTY DESC '
end
[/code]
heart75047
一般會員


發表:9
回覆:13
積分:19
註冊:2010-05-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-04-17 09:31:16 IP:211.20.xxx.xxx 訂閱
原程式因為加入新的SQL 所以突破8000字...
MSSQL中 varchar最大字數 是8000字 超過會被卡掉
所以只好用暫存表拆開
用暫存表的話 就不能用字串...
系統時間:2024-04-25 22:57:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!