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'
你可以用”把'MERGE'放在子查询中。我的意思是,你*可以*。它只会产生一个错误,与'INSERT','UPDATE'或'DELETE'相同。 –