2011-03-10 46 views
0

我試圖對Oracle鏈接的服務器執行此查詢,並得到以下錯誤,我知道我的查詢格式錯誤,但我無法弄清楚在哪裏以及如何。「ORA-01747:無效的user.table.column,table.column或列規範」

DECLARE @CREDIT_CUST_SQL NVARCHAR(1000) = NULL; 
SET @CREDIT_CUST_SQL = 'SELECT 
          cu.[ST_CD] 
          ,cu.[SRT_CD] 
          ,cu.[TITLE] 
          ,cu.[FNAME] 
          ,cu.[INIT] 
          ,cu.[LNAME] 
          ,cu.[ADDR1] 
          ,cu.[ADDR2] 
          ,cu.[CITY] 
          ,cu.[COUNTRY] 
          ,cu.[ZIP_CD] 
          ,cu.[HOME_PHONE] 
          ,cu.[BUS_PHONE] 
          ,cu.[EXT] 
         FROM [AR].[CUST] cu, 
          [CUSTOM].[CUST_OTHER] co, 
          [AR].[CUST_CR] cc 
         WHERE cu.CUST_CD = co.CUST_CD 
          AND cu.CUST_CD = cc.CUST_CD 
          AND cu.DOB IS NOT NULL' 



EXECUTE (@CREDIT_CUST_SQL) AT LIVE_BD; 

而且我得到這個錯誤,

「ORA-01747:無效user.table.column,TABLE.COLUMN,或列規格」

任何想法,爲什麼發生。謝謝。

+0

你也應該使用顯式聯接即。 FROM Cust cu INNER JOIN Cust_Other co on cu.Cust_CD = co.Cust_CD .....,而不是您正在使用的cartestian連接ie。 FROM cust,cust_other – Leslie 2011-03-10 22:09:32

+0

@Leslie,連接在where子句中完成。這不是笛卡兒的加入。 – DCookie 2011-03-11 17:31:46

+0

@Dcookie - 通過讓FROM子句引用2個表並執行笛卡爾連接定義的條件:笛卡爾連接是將一個表的每一行連接到另一個表的每一行時。 你也可以通過將表的每一行連接到它自己的每一行來獲得一個表。 選擇* 從Film_Table,Director_Film_Table; http://www.fluffycat.com/SQL/Cartesian-Joins/ – Leslie 2011-03-11 22:01:21

回答

4

你的代碼看起來像SQL服務器

不要使用括號([])引用的列​​名,只是把它作爲是對資本的有效標識或使用(SQL標準)對非有效標識符或非大寫標識符的雙引號。

像這樣:

SELECT 
         cu.ST_CD 
         ,cu.SRT_CD 
         ,cu.TITLE 
         ,cu.FNAME 
         ,cu.INIT 
         ,cu.LNAME 
         ,cu.ADDR1 
         ,cu.ADDR2 
         ,cu.CITY 
         ,cu.COUNTRY 
         ,cu.ZIP_CD 
         ,cu.HOME_PHONE 
         ,cu.BUS_PHONE 
         ,cu.EXT 
        FROM AR.CUST cu, 
         CUSTOM.CUST_OTHER co, 
         AR.CUST_CR cc 
        WHERE cu.CUST_CD = co.CUST_CD 
         AND cu.CUST_CD = cc.CUST_CD 
         AND cu.DOB IS NOT NULL 
相關問題