2011-09-14 96 views
3

我有一個工作的視圖,我在SQL Server管理工作室編輯它,它沒有工作,我拿出了更改並保存下來,它仍然沒有儘管恢復到原來的狀態,仍然可以繼續工作。在Management Studio中編輯SQL Server視圖後不工作

,我發現了錯誤

連接的表不能在包含查詢外指定加入 運營商。視圖或函數'adept_invoiced'包含連接表。

我已經搜索並提出了一個可能的連接語法問題,因爲2001年編寫的視圖和我試圖在Management Studio中編輯它(第一次)。

這個視圖在我今天上午編輯之前幾年都運行完美。

這是從/凡第....

FROM dbo.SYS_COMP_ADDRESS 
     CROSS JOIN dbo.SL_ACCOUNTS 
     INNER JOIN dbo.SL_TRANSACTIONS 
        INNER JOIN dbo.ORD_HEADER 
        ON dbo.SL_TRANSACTIONS.ST_ORDER_NUMBER = 
         dbo.ORD_HEADER.OH_ORDER_NUMBER 
        INNER JOIN dbo.SL_PL_NL_DETAIL 
          LEFT OUTER JOIN dbo.STK_STOCK 
           ON dbo.SL_PL_NL_DETAIL.DET_STOCK_CODE = 
            dbo.STK_STOCK.STKCODE 
          INNER JOIN dbo.ORD_DETAIL 
           ON dbo.SL_PL_NL_DETAIL.DET_ORDER_LINK = 
            dbo.ORD_DETAIL.OD_PRIMARY 
          LEFT OUTER JOIN dbo.STK_STOCK3 
           ON dbo.SL_PL_NL_DETAIL.DET_STOCK_CODE = 
            dbo.STK_STOCK3.STKCODE3 
          LEFT OUTER JOIN dbo.STK_STOCK_2 
           ON dbo.SL_PL_NL_DETAIL.DET_STOCK_CODE = 
            dbo.STK_STOCK_2.STKCODE2 
          LEFT OUTER JOIN dbo.PRC_PRICE_RECS2 
           ON dbo.SL_PL_NL_DETAIL.DET_PRICE_CODE = 
            dbo.PRC_PRICE_RECS2.PRCODE2 
        ON dbo.SL_TRANSACTIONS.ST_HEADER_KEY = 
         dbo.SL_PL_NL_DETAIL.DET_HEADER_KEY 
     ON dbo.SL_ACCOUNTS.CUCODE = dbo.SL_TRANSACTIONS.ST_COPYCUST 
     INNER JOIN dbo.SL_ACCOUNTS2 
     ON dbo.SL_ACCOUNTS.CUCODE = dbo.SL_ACCOUNTS2.CUCODE2 
WHERE (dbo.SL_TRANSACTIONS.ST_TRANTYPE IN ('INV', 'CRN')) 
     AND (dbo.SL_TRANSACTIONS.ST_BATCH_FLAG <> 1) 
     AND (dbo.SL_ACCOUNTS.CUCODE <> '1023134') 
     AND (dbo.SL_ACCOUNTS.CUCODE <> '1023265') 
     AND (dbo.SL_ACCOUNTS.CUSORT NOT LIKE '%other income%') 
     AND (dbo.SL_ACCOUNTS.CUSORT NOT LIKE '%supplier%') 

我不知道它可能會失敗,或如何解決它!

任何幫助將不勝感激。

+0

+1只是因爲我從來沒有聽說過這個錯誤的!在最後的'LEFT OUTER JOIN'下有3個連續的'JOIN'條件,這是故意的嗎?除非你能告訴我們語義應該是什麼,否則我們不能告訴你正確的語法。 –

+1

你從哪裏得到這個錯誤?它聽起來不像SQL Server錯誤,所以推測它不是直接來自查詢SSMS中的視圖? –

+0

@Damien Msg 4424'select * from sys.messages''%'''%''%'' –

回答

0

試試這個:

FROM dbo.SYS_COMP_ADDRESS 
     CROSS JOIN dbo.SL_ACCOUNTS 
     INNER JOIN dbo.SL_TRANSACTIONS 
        INNER JOIN dbo.ORD_HEADER 
        ON dbo.SL_TRANSACTIONS.ST_ORDER_NUMBER = 
         dbo.ORD_HEADER.OH_ORDER_NUMBER 
        INNER JOIN dbo.SL_PL_NL_DETAIL 
        ON dbo.SL_TRANSACTIONS.ST_HEADER_KEY = 
         dbo.SL_PL_NL_DETAIL.DET_HEADER_KEY 
          LEFT OUTER JOIN dbo.STK_STOCK 
           ON dbo.SL_PL_NL_DETAIL.DET_STOCK_CODE = 
            dbo.STK_STOCK.STKCODE 
          INNER JOIN dbo.ORD_DETAIL 
           ON dbo.SL_PL_NL_DETAIL.DET_ORDER_LINK = 
            dbo.ORD_DETAIL.OD_PRIMARY 
          LEFT OUTER JOIN dbo.STK_STOCK3 
           ON dbo.SL_PL_NL_DETAIL.DET_STOCK_CODE = 
            dbo.STK_STOCK3.STKCODE3 
          LEFT OUTER JOIN dbo.STK_STOCK_2 
           ON dbo.SL_PL_NL_DETAIL.DET_STOCK_CODE = 
            dbo.STK_STOCK_2.STKCODE2 
          LEFT OUTER JOIN dbo.PRC_PRICE_RECS2 
           ON dbo.SL_PL_NL_DETAIL.DET_PRICE_CODE = 
            dbo.PRC_PRICE_RECS2.PRCODE2 
     ON dbo.SL_ACCOUNTS.CUCODE = dbo.SL_TRANSACTIONS.ST_COPYCUST 
     INNER JOIN dbo.SL_ACCOUNTS2 
     ON dbo.SL_ACCOUNTS.CUCODE = dbo.SL_ACCOUNTS2.CUCODE2 
WHERE (dbo.SL_TRANSACTIONS.ST_TRANTYPE IN ('INV', 'CRN')) 
     AND (dbo.SL_TRANSACTIONS.ST_BATCH_FLAG <> 1) 
     AND (dbo.SL_ACCOUNTS.CUCODE <> '1023134') 
     AND (dbo.SL_ACCOUNTS.CUCODE <> '1023265') 
     AND (dbo.SL_ACCOUNTS.CUSORT NOT LIKE '%other income%') 
     AND (dbo.SL_ACCOUNTS.CUSORT NOT LIKE '%supplier%') 
+1

移動'ON'子句可以改變查詢的語義。 –

+0

這似乎工作,謝謝。儘管從另一個視圖訪問該視圖時仍然出現類似的錯誤,該視圖使用聯合從不同數據庫中加入相同的視圖。 – Dazzathedrummer

0

您使用的是老式的任何地方連接語法所以搜索*==*在視圖定義

+0

我只在case語句中使用'='.....我會發布整個腳本,但它很長! – Dazzathedrummer

+0

我的帖子似乎有星號剝去(* =,= *) – SPE109

+0

並再次。星號= =星號 – SPE109

相關問題