線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2138
推到 Plurk!
推到 Facebook!

SQL 長度不能太長嗎?

尚未結案
hazard
一般會員


發表:30
回覆:24
積分:10
註冊:2006-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-29 13:04:45 IP:211.22.xxx.xxx 未訂閱
我的 SQL 內容是 : Line1:SELECT * FROM TAbleA WHERE Year = 93 AND ( EmpNo = 'E195' OR  EmpNo = 'E260' OR  EmpNo = 'E328' OR  EmpNo = 'E283' OR  EmpNo = 'E031' OR  EmpNo = 'A073' OR  EmpNo = 'A084' OR  EmpNo = 'A120' OR  EmpNo = 'H001' OR  EmpNo = 'H009' Line2: OR  EmpNo = 'H015' OR  EmpNo = 'H029' OR  EmpNo = 'H032' OR  EmpNo = 'H036' OR  EmpNo = 'H039' OR  EmpNo = 'H040' OR  EmpNo = 'H041' OR  EmpNo = 'H042' OR  EmpNo = 'H047' OR  EmpNo = 'H049' Line3:.... . . . Line235:.... Line236:OR  EmpNo = 'C058' OR  EmpNo = 'C107' OR  EmpNo = 'J027' OR  EmpNo = 'P122' OR  EmpNo = 'P829' OR  EmpNo = 'P830' OR  EmpNo = 'P832' OR  EmpNo = 'P919' OR  EmpNo = 'X429' OR  EmpNo = 'X448' Line237:) 一 prepare 後會有錯誤訊息, 但用 SQL Exploer 直接下確沒問題,不知道有沒有人可以幫忙回答
chris_shieh
高階會員


發表:46
回覆:308
積分:240
註冊:2004-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-29 13:30:19 IP:61.58.xxx.xxx 未訂閱
是的, SQL不能太長 因為你是透過元件連接DB 所以限制是因為client端元件 看你的語法 應該可以以下作法 1. 先自己歸類一下, 開頭字元相符的, ex:只找 H*, A* P* 等 , 剩下抓回來自己比對, 不然依照這種條件要DB Server做會太耗資源了 2. 對於這種 OR EmpNo = 'C107' OR EmpNo = 'J027' OR EmpNo = 'P122' 可以改用 or EmpNO in ['C107','J207','P122...] 減少重複語句 @瞭解越多.懂得越少@
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-29 13:30:35 IP:202.62.xxx.xxx 未訂閱
您好﹗    寫成組字串的方式試試﹕ SQL.Text := '敘述一' + '敘述二' + '敘述三' + ...... 一般來講﹐單句敘述不要超過256個Byte﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
hazard
一般會員


發表:30
回覆:24
積分:10
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-29 15:05:16 IP:61.218.xxx.xxx 未訂閱
用 EmpNO in ('C107','J207','P122...) 這種方法是可行的,但我這個 Query Search 出來後要做編輯,用上面的方法,RequestLive 為 True 還是有問題 而且我這個 Query 還有 Filter 絛件過濾,所以沒辦法像 chris_shieh 所講的抓下來再比對,必須在 Query.Active 後就是我所要得資料,因為編輯完後,要全部回存 至於 SQL不能太長 ,我是參照 http://delphi.ktop.com.tw/topic.php?topic_id=20184 的做法,所以 Query.SQL.count 有 200多個,應該就不會有 255 的限制
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-29 19:35:58 IP:60.248.xxx.xxx 未訂閱
SQL指令基本上是一文字串,以斷行符號(#13)分列,格式如下 |------第一列--------------|-----第二列---------------|------第三列---------------| Select * From tttt Where #13xxxxxxxxxxxxxxxxxxxxxxxx#13xxx xxxxxxxxxxxxxxxxxxxxx#13    如上所示,每列以斷行符號做隔     單句敘述不要超過256個Byte﹒=>是指每列字元不可超過256Bytes(含斷行符號#13),依資料庫的不同可能有不同的限制,不管如何256Bytes算是最大公約數了,就以它為準吧!    而整個SQL指令的總長度,依資料庫的不同而有不同,印象中不知那個資料庫的SQL總長度不可超4KBytes(含斷行符號)(僅供參考)
另外:
TQuery.SQL.Text := '....' '......' ......
用這種方式設定SQL要注意自行加入斷行符號,免得單列長度超過256字元    TQuery.SQL.Add('....');
而用這種方式設定SQL則要注意加入的字串不要超過255Bytes即可,斷行符號系統會自動加入    不管用何方式,SQL總長度還是要注意一下,當然啦!在大部份的情形下是不會超過的。
_______________________________________ 深藍的魚,祝您好運..........連連
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-02 10:15:16 IP:210.69.xxx.xxx 未訂閱
不然就 create 一個暫時存放結果的 table 這樣原本的 SQL 可以拆開成很多 SQL, 每個 SQL 將各自結果寫入暫時存放結果的 table, 最後再去 SELECT 暫時存放結果的 table ********************* 如果您滿意答案,請結案 *********************
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
系統時間:2024-06-26 15:52:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!