2013-03-19 107 views
0

我得到了充分證明錯誤:ORDER BY項目必須出現......但我沒有ORDER BY子句

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

這裏是我的SQL語句:

INSERT INTO PropertyList 
      (PropertyID, Initials) 
SELECT DISTINCT P.PropertyID, "vSTEBCodes" 
FROM Property AS P INNER JOIN ValiditySTEBCodes AS VC 
       ON P.ControlNumber=VC.ControlNumber 

正如你所看到的目前沒有ORDER BY聲明。據推測,在那裏有一個隱含的ORDER BY,但我看不到它。

我對MSAP中鏈接到SQL Server 2008後端的鏈接表運行這條語句。當我從完整版本的Access 2002運行它時,它運行正常。如果我嘗試從Access 2000運行時運行它,則會收到顯示的錯誤。

我知道Access在將它們轉發到ODBC源(尤其是多記錄INSERT和UPDATE)之前,有一種在後臺重新編寫查詢的傾向。我在想這可能是問題。

+0

這是說,「如果指定SELECT DISTINCT ORDER BY項目必須出現在選擇列表中。」你需要在那裏提供一個ORDER BY子句來使它工作。 – 2013-03-19 20:15:07

+0

也許Access會爲你添加一個ORDER BY。什麼是「vSTEBCodes」?這應該是一個字符串文字,一個列名,還有其他的東西?如果它應該是一個字符串,請嘗試使用「單引號」,並嘗試使用「GROUP BY P.PropertyID」而不是「DISTINCT」。 – 2013-03-19 20:15:16

+0

@ AwesomeProgrammer不,這不是錯誤信息所說的。儘管每個陳述*應該*可能具有可預測和可重複的ORDER BY,但是沒有這樣的要求。 – 2013-03-19 20:16:05

回答

1

從註釋中編譯,請嘗試:

INSERT INTO dbo.PropertyList(PropertyID, Initials) 
    SELECT P.PropertyID, Initials = 'vSTEBCodes' -- alias and single quotes 
    FROM dbo.Property AS P -- always use schema prefix 
    INNER JOIN dbo.ValiditySTEBCodes AS VC 
    ON P.ControlNumber = VC.ControlNumber 
    GROUP BY P.PropertyID -- instead of DISTINCT 
    ORDER BY P.PropertyID; -- maybe overrides Access stupidity 
相關問題