Представление SQL Server не работает после редактирования в Management Studio - PullRequest
3 голосов
/ 14 сентября 2011

У меня было представление, которое работало, я редактировал его в SQL Server Mgmt Studio, он не работал, я извлекал изменения и сохранял его, он все еще не работает, несмотря на возвращение его в исходное состояние.

Я получаю ошибку

Объединенные таблицы не могут быть указаны в запросе, содержащем внешнее объединение операторы. Представление или функция 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%' )  

Я не уверен, где это может произойти сбой или как это исправить!

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Попробуйте это:

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%' )   
0 голосов
/ 14 сентября 2011

Используете ли вы где-нибудь синтаксис соединения старого стиля, поэтому ищите *= и =* в определении вашего представления

...