台灣最大程式設計社群網站
線上人數
1927
 
會員總數:246575
討論主題:190032
歡迎您免費加入會員
討論區列表 >> MS SQL >> [SQL]關於TimeOut 的問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
[SQL]關於TimeOut 的問題
價值 : 0 QP  點閱數:6270 回應數:12
樓主

steven_chen
初學者
33 8
106 10
發送站內信

錯誤訊息:
-------------------------
錯誤類型:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E31)
[Microsoft][ODBC SQL Server Driver]Timeout expired
/weeklyreport/asp/QuarterlyReportList.ASP, line 72

同樣的語法 (select語法,比較複雜一點 ),在 sql query analyzer 下執行約1.07分
如果放到 asp 網頁..就會有時間的問題
我嘗試改過了 iis中  的 asp    script  time  ,我已經設到 720 秒了,還是出現一樣的問題,我也改了odbc driver 的 pool time 也無用
請問各位先進有無辦法解決

本篇文章發表於2002-07-24 15:04
1樓
回應

凱斯
檢舉此回應
在程式的最前端加上server.scripttimeout="900"
900是我隨便寫的
喜歡多少寫多少吧
900/5=180...這樣應該是180秒吧(我沒寄錯的話)
本篇文章回覆於2002-07-24 15:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

烤豬排
檢舉此回應
你的檔名是QuarterlyReportList.ASP

所以應該是要查詢一堆資料.. 輸出報表?

是 資料庫演算時間太長 或是 資料筆數太多??

如果是演算時間太長.. 可能要改SQL語句的結構..

如果是資料筆數太多.. 可以用分頁方式解決..

分頁.. 也是有很多方法的..
本篇文章回覆於2002-07-24 15:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

steven_chen
檢舉此回應
我已經把 timeout 時間設為 server.scripttimeout=3600 還是一樣
我的語法有點複雜是因為我要用到 cross Table
語法如下:

SELECT A.WORKID,B.WORKDESC,
'Q1'=ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
   FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in(select userid from userdata where departmentid='7600') AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND  CONVERT(NUMERIC,WK.WEEKNO) >=1 AND CONVERT(NUMERIC,WK.WEEKNO) <=13),0),
'Q1 %'= 
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=1 AND CONVERT(NUMERIC,WK.WEEKNO) <=13),0),
'Q2'=ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in(select userid from userdata where departmentid='7600') AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=14 AND CONVERT(NUMERIC,WK.WEEKNO) <=26),0),
'Q2 %'=
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=14 AND CONVERT(NUMERIC,WK.WEEKNO) <=26),0),
'Q3'=ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
   FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in(select userid from userdata where departmentid='7600') AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=27 AND CONVERT(NUMERIC,WK.WEEKNO) <=39),0),
'Q3 %'=
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=27 AND CONVERT(NUMERIC,WK.WEEKNO) <=39),0),
'Q4'=ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in(select userid from userdata where departmentid='7600') AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=40 AND CONVERT(NUMERIC,WK.WEEKNO) <=52),0),
'Q4 %'=
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=40 AND CONVERT(NUMERIC,WK.WEEKNO) <=52),0),
'Total'=
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=1 AND CONVERT(NUMERIC,WK.WEEKNO) <=13),0)+
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM 
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=14 AND CONVERT(NUMERIC,WK.WEEKNO) <=26),0)+
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=27 AND CONVERT(NUMERIC,WK.WEEKNO) <=39),0)+
 ISNULL((SELECT SUM(WK.MONHOUR+WK.TUEHOUR+WK.WEDHOUR+WK.THUHOUR+WK.FRIHOUR+WK.SATHOUR+WK.SUNHOUR) 
 FROM WEEKLYDATA WK,WORKITEM TM
 WHERE WK.WORKID=TM.WORKID AND  WK.USERID in( select userid from userdata where departmentid ='7600')  AND A.WORKID=WK.WORKID AND TM.WORKDESC=B.WORKDESC AND CONVERT(NUMERIC,WK.WEEKNO) >=40 AND CONVERT(NUMERIC,WK.WEEKNO) <=52),0)
 FROM WEEKLYDATA A,WORKITEM B 
 WHERE  A.USERID in (select userid from userdata where departmentid ='7600') AND CONVERT(NUMERIC,A.WEEKNO) >=1 AND CONVERT(NUMERIC,A.WEEKNO)<=52 AND A.WORKID=B.WORKID 
 GROUP BY A.WORKID,B.WORKDESC 

內容有點長,是語法的問題,沒辦法再縮了,也不是分頁的問題
'7600'代表的是部門,如果我改成 '8000'另外一個部門就沒問題,應該是資料沒那麼多的關係,不知道各位還有什麼寶貴的意見,可供我參考



本篇文章回覆於2002-07-24 16:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

阿修羅
檢舉此回應
這是典型的當SQL語法當萬能使用
不是說SQL不好
而是如果以效能為主
那就得用最有效率的方式去達到

有些時候,用程式,雖然麻煩點,但效率會更好
(從事大型專案的經驗)
--
輕芙雅風之阿修羅
http://ylg.no-ip.com
本篇文章回覆於2002-07-24 17:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

烤豬排
檢舉此回應
換成另一個部門就 ok ?

那資料筆數當然有關係..

一定要一次把所有筆數抓出來??
本篇文章回覆於2002-07-24 17:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

sgg
檢舉此回應
 WHERE  A.USERID in (select userid from userdata where departmentid ='7600') AND CONVERT(NUMERIC,A.WEEKNO) >=1 AND CONVERT(NUMERIC,A.WEEKNO)<=52 AND A.WORKID=B.WORKID 
在in裡放select是很不明智的
請先把in裡的select先找出來再連起來..效果絶對明顯^_^
本篇文章回覆於2002-07-24 17:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

浩呆
捐贈 VP 給 快樂打雜妹 檢舉此回應
在sql裡執行1分鐘....資料應該很多了.....想辦法調整一下語法或看有無index...
調一下效能吧
本篇文章回覆於2002-07-24 23:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

Ty Ty
檢舉此回應
You can try this.

Set conn = New ADODB.Connection
conn.CommandTimeOut = 0
本篇文章回覆於2002-07-25 11:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

xin
檢舉此回應
WHERE  A.USERID in (select userid from userdata where departmentid ='7600') AND CONVERT(NUMERIC,A.WEEKNO) >=1 AND CONVERT(NUMERIC,A.WEEKNO)<=52 AND A.WORKID=B.WORKID 
在in裡放select是很不明智的
請先把in裡的select先找出來再連起來..效果絶對明顯^_^
--------------------
但如果不在in裡面select,效率真的會比較好嗎?
在我的認知裡,如果把in裡的select先找出來再連起來,要多做的事有
1.多開/關一次recordset
2.反覆連結sql字串,量小還好,若量大.....
一直以為這二件事都是降低效率的元兇.所以若是我,也會採用在in裡select

不知究竟應是如何?
本篇文章回覆於2002-07-25 13:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

steven_chen
檢舉此回應
感謝各位所提供的意見:
其實我所要做的如下:

SQL 的結果如果是如下

fieldA fieldB fieldC fieldD
------- ------- ------ -------
41 1001 ABC 7
41 1002 DE 5
42 1001 ABC 5
42 1003 HD 4
43 1002 DE 2
45 1003 HD 4

我的結果要在HTML 的 TABLE SHOW 出

fieldB fieldC 41 42 43 44 45
------ ------ ---- ---- ---- ---- ---- 
1001 ABC 7 5
1002 DE 5 2
1003 HD 4 4 

因為 41,42,43,44,45 在資料庫中本身是值,而我要以這些值當作我在
HTML TABLE 中的欄位,所以我會用 IN SELECT ......的方式
它產生的結果筆數不會超過十幾筆,因為都是一些 SUM 過之後的值
只是在 QUERY 的過程中筆數可能多了點,如果以兩個RECORDSET 的方式去比對
一來更複雜了點,二來效率上似乎不會比較快,目前我處理的方式就是減少了一些
欄位,使QUERY 的速度加快,這個方法似乎可行

本篇文章回覆於2002-07-25 13:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

xin
檢舉此回應
你的 fieldA 數值是否有固定範圍?或是有可能無限制增加?
我有寫過類似上面的結果,但是固定範圍的.
sql 語法並沒有那麼一大串
本篇文章回覆於2002-07-25 14:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

steven_chen
檢舉此回應
FieldA 的值是有範圍1-52   ..可是是變動的
sql 語法會看起來那麼大,其實是要sum 一些欄位值的關係
因為 FieldD 不是單一值,是要幾個欄位 sum起來後的結果,
所以我那個範例可能不大恰當,可是意思大概就是那樣
Ty Ty 的解法我還沒試過,我找時間試一下,不過看起來意思是要讓
連結資料庫的時間無限制,我之前試過改iis  and ODBC 的時間
不過沒用,我會再試一下..thx!!
本篇文章回覆於2002-07-26 15:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.