如何在AdoQuery中使用WITH遞迴的SQL寫法 |
答題得分者是:careychen
|
shougo
一般會員 發表:5 回覆:4 積分:1 註冊:2003-03-20 發送簡訊給我 |
我有一支程式,其中有一個AdoQuery中的SQL如下:
WITH XYZ(S1,S2) AS ( SELECT A.S1,A.S2 FROM A UNION ALL SELECT A.S1,A.S2 FROM A INNER JOIN XYZ ON A.S1=XYZ.S2 ) SELECT * FROM XYZ ORDER BY S1,S2 OPTION(MAXRECURSION 100) 在Delphi程式中的寫法如下: With AdoQuery Do begin Close; SQL.Clear; SQL.Add(' WITH XYZ(S1,S2) AS ( SELECT A.S1,A.S2 FROM A UNION ALL ' ' SELECT A.S1,A.S2 FROM A INNER JOIN XYZ ON A.S1=XYZ.S2 ) ' ' SELECT * FROM XYZ ORDER BY S1,S2 ON(MAXRECURSION 100) '); Open; end; 再將Adoquery.Open時會出現錯誤:'Incorrect syntax near the keyword 'WITH''. 請問要如何解決此問題呢?我直接將SQL拿去SQL Server下是沒問題的 ps.環境為Delphi 5 SQL Server 2005 |
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
===================引 用 shougo 文 章=================== 我有一支程式,其中有一個AdoQuery中的SQL如下: WITH XYZ(S1,S2) AS ( SELECT A.S1,A.S2 FROM A UNION ALL SELECT A.S1,A.S2 FROM A INNER JOIN XYZ ON A.S1=XYZ.S2 ) SELECT * FROM XYZ ORDER BY S1,S2 OPTION(MAXRECURSION 100) 在Delphi程式中的寫法如下: With AdoQuery Do begin Close; SQL.Clear; SQL.Add(' WITH XYZ(S1,S2) AS ( SELECT A.S1,A.S2 FROM A UNION ALL ' ' SELECT A.S1,A.S2 FROM A INNER JOIN XYZ ON A.S1=XYZ.S2 ) ' ' SELECT * FROM XYZ ORDER BY S1,S2 ON(MAXRECURSION 100) '); <--OPTION Open; end; 再將Adoquery.Open時會出現錯誤:'Incorrect syntax near the keyword 'WITH''. 請問要如何解決此問題呢?我直接將SQL拿去SQL Server下是沒問題的 ps.環境為Delphi 5 SQL Server 2005 您好, 我沒有 sql server 環境可以測, 也不知道 上面紅字的部份 是不是 造成錯誤的原因 不過, 您說那段語法在 sql server 是 ok 的, 透過 ado 郤不行 那可不可試一下 比較簡單的 with ... select 語法 ( 非 recursive ) 先確定 ado 支不支援 with clause.
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲. |
AndrewK
高階會員 發表:6 回覆:151 積分:161 註冊:2006-10-09 發送簡訊給我 |
WITH XYZ(S1,S2) AS
( SELECT A.S1,A.S2 FROM A UNION ALL SELECT A.S1,A.S2 FROM A INNER JOIN XYZ ON A.S1=XYZ.S2 ) SELECT * FROM XYZ ORDER BY S1,S2 OPTION(MAXRECURSION 100) ==================================== 你除了前輩所說的 Option 打成 ON 以外 你的 XYZ Table 應該是不存在的 那 Inner joni xzy on a.s1=xyz.s2 這裡的 Table 你是不是代錯了 你的 sql 語法,我在 sql server 上試過 是不成功的
------
Just Do It ------------------------- 其實男生不是真的喜歡你不減肥,而是喜歡你愛吃還不肥;也不是真的喜歡你不化妝,而是喜歡你素顏也好看;也不是真的喜歡你瘦,而是喜歡你瘦卻有胸;也不是真喜歡你獨立,而是他忙的時候別煩他。女孩子,太認真你就輸了。 |
shougo
一般會員 發表:5 回覆:4 積分:1 註冊:2003-03-20 發送簡訊給我 |
|
careychen
尊榮會員 發表:41 回覆:580 積分:959 註冊:2004-03-03 發送簡訊給我 |
hi,請您看一下在您的 ADOConnection 提供者是不是選擇
Microsoft OLE DB Provider for SQL Server ,如果是的話,請改成 SQL Native Client 即可!! ===================引 用 shougo 文 章=================== 首先感謝兩位的回答^^ Dear st33chen: 那個Option是我在PO文時的筆誤,程式中並沒有寫錯,試過很多次,似乎adoQuery無法支援這種語法 Dear AndrewK: 那個XYZ是代表遞迴集合Table的名稱,這個語法我在SQL Server上跑是OK的,有資料出來 謝謝
------
價值的展現,來自於你用哪一個角度來看待它!! |
shougo
一般會員 發表:5 回覆:4 積分:1 註冊:2003-03-20 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |