2015-10-19 88 views
0

非常困惑,SQL Server 2012確定MERGE子查詢的語法問題。但是,當我單獨運行子查詢時,它沒有任何問題。不正確的語法合併連接

一直盯着這一段時間,需要一些新鮮的眼睛。

消息102,級別15,狀態1,行14

附近有語法錯誤 'CM'。

消息102,級別15,狀態1,行25

附近有語法錯誤 'CS'。

USE [UDARepDBArchive] 

INSERT INTO ZZZ_SCD 

SELECT [Id] 
    ,[ZZZ] 
    ,[MMMMM] 
    ,[VVVVVVV]     
    ,Eff_Date 
    ,End_Date = CONVERT(DATETIME2,END_DATE) 
    ,Current_Flag 
    FROM 

    (MERGE ZZZ_SCD CM 
       USING (SELECT [ID] = GA.ACCOUNTID 
           ,ZZZ = CASE 
             WHEN isnull(g.MMMMM,'0') = '0' OR ISNULL(g.VVVVVVV,'0') = '0' 
             THEN '0' 
             ELSE g.MMMMM /g.VVVVVVV 
             END 
           ,MMMMM = G.MMMMM 
           ,VVVVVVV = G.VVVVVVV 
         FROM UDAReporting.rbd.STRGroup G 
         LEFT OUTER JOIN UDAReporting.rbd.STRGroupAccount GA ON GA.GROUPID = G.GROUPID 
         ) CS ON CM.ID = CS.ID 

         WHEN NOT MATCHED THEN 
           INSERT VALUES (cs.[Id] 
              ,cs.[ZZZ] 
              ,cs.[MMMMM] 
              ,cs.[VVVVVVV]     
              ,CONVERT(DATETIME2,GETDATE())             
              ,'2199-10-01 00:00:00.000' 
              ,'Y') 
         WHEN MATCHED AND CM.Current_Flag = 'Y' AND (CM.ZZZ <> CS.ZZZ) THEN 
           UPDATE SET CM.Current_Flag = 'N', CM.End_date = CONVERT(DATETIME2,GETDATE()) 
       OUTPUT $Action Action_Out, cs.[Id] 
              ,cs.[ZZZ] 
              ,cs.[MMMMM] 
              ,cs.[VVVVVVV]     
              ,CONVERT(DATETIME2,GETDATE()) AS Eff_date            
              ,'2199-10-01 00:00:00.000' End_Date 
              ,'Y' Current_Flag 

     ) AS MERGE_OUT 
    WHERE MERGE_OUT.Action_Out = 'UPDATE' 
+1

你可以用」把'MERGE'放在子查詢中。我的意思是,你*可以*。它只會產生一個錯誤,與'INSERT','UPDATE'或'DELETE'相同。 –

回答

0

出現的問題是在exsisting數據庫所造成的「SET COMPATIBILITY_LEVEL = 90」,而不是升級應對潛在的問題,我就可以創建一個新的數據庫