SQL Server 2008 MERGE指令在另一个MERGE中



我想创建一个包含两个MERGE指令的存储过程。

上一个程序太慢(标准UPSERT):

IF EXISTS (SELECT 1 FROM F_Fond with (updlock,serializable) WHERE F_ISIN = @ISIN)
    BEGIN 
    (...)
    END
(...)

所以我试着这样修改:

CREATE PROCEDURE [dbo].[InsertPrixNew]
    (@Table InsertPrixFond READONLY)
AS
    MERGE INTO F_Fond T
    USING @Table S ON T.F_ISIN = S.ISIN
    WHEN MATCHED THEN
        BEGIN -- Here is the syntax problem...
            MERGE INTO F_PRIX P
            USING @Table S ON P.F_ISIN = S.ISIN
                           AND P.P_DATE = S.DATE
            WHEN MATCHED THEN
                UPDATE F_PRIX 
                SET P_PRIX = S.PRIX 
                WHERE F_ISIN = S.ISIN AND P_DATE = S.DATE
            WHEN NOT MATCHED THEN
                INSERT INTO F_PRIX (F_ISIN, P_DATE, P_PRIX) 
                VALUES (S.ISIN, S.DATE, S.PRIX);             
        END
    WHEN NOT MATCHED THEN
      BEGIN
          INSERT INTO F_FOND (F_ISIN, F_DATE_PRIX, F_Prix_Jour) 
          VALUES (S.ISIN, S.DATE, S.PRIX)
          INSERT INTO F_PRIX (F_ISIN, P_DATE, P_PRIX) 
          VALUES (S.ISIN, S.DATE, S.PRIX)     
      END;
-- Let's update F_DATE_PRIX
 UPDATE F_FOND SET F_DATE_PRIX = @Table.DATE, F_Prix_Jour = @Table.PRIX 
  INNER JOIN @Table ON @Table.ISIN = F_Fond.F_ISIN 
  WHERE @Table.DATE >= F_DATE_PRIX 
     OR F_DATE_PRIX IS NULL
RETURN

似乎我们不能在另一个MERGE中包含MERGE指令。

我错过了什么吗?

如果SELECT语句不是INSERT语句的直接行源,则不允许嵌套INSERT、UPDATE、DELETE或MERGE语句。

来源:链接

相关内容

最新更新