2011-05-16 68 views
1

我正在將一些軟件中的存儲過程轉換爲SQL維護中的SQL Server到Informix SQL,並且問題很多。無法將ORDER BY命令添加到存儲過程

基本上我是逐行轉換每個部分,直到我轉換完整個東西。

我有以下CREATE PROCEDURE

CREATE PROCEDURE ifxdbase:dc_buildSP (WorkID INT, CompNo smallint) 
CREATE TEMP TABLE Items 
(
    Code smallint, 
    Qty int, 
    Total int 
); 

INSERT INTO Items 
SELECT 
    tblDetails.code, 
    tblDetails.quantity, 
    tblHead.quantity 
FROM 
    tblHead 
INNER JOIN tblDetails ON (tblDetails.compno = tblDetails.compno AND tblDetails.id_num = tblHead.id_num) 
WHERE tblHead.compno = CompNo AND tblHead.id_num = WorkID; 
--ORDER BY tblDetails.code; 

DROP TABLE Items; 
END PROCEDURE 

既然這樣,這工作得很好,但是當我取消對該行--ORDER BY tblDetails.seqno;(並從上一行的分號),我收到了「-201語法錯誤發生了「錯誤。

基本上tblHead是一系列訂單標題,tblDetails是每個訂單的詳細信息表。選擇並加入數據工作正常,嘗試命令它失敗。

排序應該從原來的SELECT,IIRC什麼工作,所以我看不出有什麼可以去錯了,這裏...

+0

爲什麼你需要通過將數據插入表時的順序? – 2011-05-16 11:36:10

+1

問題不在於存儲過程,問題是在INSERT INTO中不允許使用ORDER BY clausule .... SELECT結構 – Doliveras 2011-05-16 11:36:26

回答

4

如前所述here

.... 。不是 SELECT語句的所有子句和選項都可用於 ,您可以在INSERT語句的查詢中使用該語句。下面的SELECT 條款和選項都不會被Informix的INSERT語句支持 :

FIRST和INTO TEMP

ORDER BY和UNION

所以ORDER BY沒有在INSERT命令支持在Informix中。

我沒有的東西,現在來測試,但你可以嘗試這樣的事情,作爲一種解決方法:

INSERT INTO Items 
SELECT code, dQuantity, hQuantity 
    FROM (
    SELECT 
    tblDetails.code, 
    tblDetails.quantity dQuantity, 
    tblHead.quantity hQuantity 
    FROM 
    tblHead 
    INNER JOIN tblDetails ON (tblDetails.compno = tblDetails.compno AND tblDetails.id_num = tblHead.id_num) 
    WHERE tblHead.compno = CompNo AND tblHead.id_num = WorkID; 
    ORDER BY tblDetails.code 
); 
+1

好的,公平的。它在SQL Server中工作。正如上面列文所提到的那樣,無論如何都沒有真正的理由要有一個ORDER BY。感謝您提供文檔參考和解決方法建議。 – Frosty840 2011-05-16 11:48:19