2015-10-19 47 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”,而不是升级应对潜在的问题,我就可以创建一个新的数据库