Sql 创建存储过程时关键字“with”附近的语法不正确?

Sql 创建存储过程时关键字“with”附近的语法不正确?,sql,azure-sql-database,Sql,Azure Sql Database,下面是显示错误new with keyword的存储过程: 下面的过程用于更新现有记录,如果json输入参数中不存在记录,则删除记录,如果未找到匹配项,则插入记录。但下面的问题甚至不允许创建新的存储过程 CREATE PROCEDURE usp_PaymentRecommendationsInsertUpdate @PaymentRecommendationsJson NVARCHAR(MAX) AS BEGIN MERGE INTO PaymentRec

下面是显示错误new with keyword的存储过程:

下面的过程用于更新现有记录,如果json输入参数中不存在记录,则删除记录,如果未找到匹配项,则插入记录。但下面的问题甚至不允许创建新的存储过程

CREATE PROCEDURE usp_PaymentRecommendationsInsertUpdate
    @PaymentRecommendationsJson NVARCHAR(MAX)
    AS
    BEGIN
        MERGE INTO PaymentRecommendations AS PR
        USING ( 
                    SELECT      ClaimId,
                                CoverageTypeId,
                                Payee,
                                IndemnityPmtRequestAmnt,
                                ExpensePaymentRequestAmnt,
                                RequestDate,
                                Memo,
                                CheckNumber,
                                IssueDate,
                                CreatedOn,
                                CreatedBy,
                                ModifiedOn,
                                ModifiedBy
                    FROM    OPENJSON(@PaymentRecommendationsJson)
                            WITH (
                                        ClaimId BIGINT,
                                        CoverageTypeId SMALLINT,
                                        Payee VARCHAR(256),
                                        IndemnityPmtRequestAmnt MONEY,
                                        ExpensePaymentRequestAmnt MONEY,
                                        RequestDate DateTime,
                                        Memo VARCHAR(512),
                                        CheckNumber VARCHAR(16),
                                        IssueDate DATETIME,
                                        CreatedOn DATETIME,
                                        CreatedBy BIGINT,
                                        ModifiedOn DATETIME,
                                        ModifiedBy BIGINT
                                )) AS InputJSON
                   ON (PR.ClaimId = InputJSON.ClaimId)
        WHEN MATCHED THEN
            UPDATE SET  ClaimId = InputJSON.ClaimId,
                        CoverageTypeId = InputJSON.CoverageTypeId,
                        Payee = InputJSON.Payee,
                        IndemnityPmtRequestAmnt = InputJSON.IndemnityPmtRequestAmnt,
                        ExpensePaymentRequestAmnt = InputJSON.ExpensePaymentRequestAmnt,
                        RequestDate = InputJSON.RequestDate,
                        Memo = InputJSON.Memo,
                        CheckNumber = InputJSON.CheckNumber,
                        IssueDate = InputJSON.IssueDate,
                        CreatedOn = InputJSON.CreatedOn,
                        CreatedBy = InputJSON.CreatedBy,
                        ModifiedOn = InputJSON.ModifiedOn,
                        ModifiedBy = InputJSON.ModifiedBy
        WHEN NOT MATCHED THEN
            INSERT (    ClaimId,
                        CoverageTypeId,
                        Payee,
                        IndemnityPmtRequestAmnt,
                        ExpensePaymentRequestAmnt,
                        RequestDate,
                        Memo,
                        CheckNumber,
                        IssueDate,
                        CreatedOn,
                        CreatedBy,
                        ModifiedOn,
                        ModifiedBy)
            VALUES (    InputJSON.ClaimId,
                        InputJSON.CoverageTypeId,
                        InputJSON.Payee,
                        InputJSON.IndemnityPmtRequestAmnt,
                        InputJSON.ExpensePaymentRequestAmnt,
                        InputJSON.RequestDate,
                        InputJSON.Memo,
                        InputJSON.CheckNumber,
                        InputJSON.IssueDate,
                        InputJSON.CreatedOn,
                        InputJSON.CreatedBy,
                        InputJSON.ModifiedOn,
                        InputJSON.ModifiedBy);
        WHEN NOT MATCHED BY SOURCE THEN
            DELETE
    END

我们需要在azure数据库中以正常方式处理它吗?

在处理过程结束时,在。。。InputJSON.ModifiedBy*;*,然后在最终删除后添加分号,如下所示:

CREATE PROCEDURE usp_PaymentRecommendationsInsertUpdate
    @PaymentRecommendationsJson NVARCHAR(MAX)
    AS
    BEGIN
        MERGE INTO PaymentRecommendations AS PR
        USING ( 
                    SELECT      ClaimId,
                                CoverageTypeId,
                                Payee,
                                IndemnityPmtRequestAmnt,
                                ExpensePaymentRequestAmnt,
                                RequestDate,
                                Memo,
                                CheckNumber,
                                IssueDate,
                                CreatedOn,
                                CreatedBy,
                                ModifiedOn,
                                ModifiedBy
                    FROM    OPENJSON(@PaymentRecommendationsJson)
                            WITH (
                                        ClaimId BIGINT,
                                        CoverageTypeId SMALLINT,
                                        Payee VARCHAR(256),
                                        IndemnityPmtRequestAmnt MONEY,
                                        ExpensePaymentRequestAmnt MONEY,
                                        RequestDate DateTime,
                                        Memo VARCHAR(512),
                                        CheckNumber VARCHAR(16),
                                        IssueDate DATETIME,
                                        CreatedOn DATETIME,
                                        CreatedBy BIGINT,
                                        ModifiedOn DATETIME,
                                        ModifiedBy BIGINT
                                )) AS InputJSON
                   ON (PR.ClaimId = InputJSON.ClaimId)
        WHEN MATCHED THEN
            UPDATE SET  ClaimId = InputJSON.ClaimId,
                        CoverageTypeId = InputJSON.CoverageTypeId,
                        Payee = InputJSON.Payee,
                        IndemnityPmtRequestAmnt = InputJSON.IndemnityPmtRequestAmnt,
                        ExpensePaymentRequestAmnt = InputJSON.ExpensePaymentRequestAmnt,
                        RequestDate = InputJSON.RequestDate,
                        Memo = InputJSON.Memo,
                        CheckNumber = InputJSON.CheckNumber,
                        IssueDate = InputJSON.IssueDate,
                        CreatedOn = InputJSON.CreatedOn,
                        CreatedBy = InputJSON.CreatedBy,
                        ModifiedOn = InputJSON.ModifiedOn,
                        ModifiedBy = InputJSON.ModifiedBy
        WHEN NOT MATCHED THEN
            INSERT (    ClaimId,
                        CoverageTypeId,
                        Payee,
                        IndemnityPmtRequestAmnt,
                        ExpensePaymentRequestAmnt,
                        RequestDate,
                        Memo,
                        CheckNumber,
                        IssueDate,
                        CreatedOn,
                        CreatedBy,
                        ModifiedOn,
                        ModifiedBy)
            VALUES (    InputJSON.ClaimId,
                        InputJSON.CoverageTypeId,
                        InputJSON.Payee,
                        InputJSON.IndemnityPmtRequestAmnt,
                        InputJSON.ExpensePaymentRequestAmnt,
                        InputJSON.RequestDate,
                        InputJSON.Memo,
                        InputJSON.CheckNumber,
                        InputJSON.IssueDate,
                        InputJSON.CreatedOn,
                        InputJSON.CreatedBy,
                        InputJSON.ModifiedOn,
                        InputJSON.ModifiedBy)
        WHEN NOT MATCHED BY SOURCE THEN
            DELETE;
    END
MERGE语句必须以分号结尾


您还可能正在处理兼容性问题。将数据库兼容性设置为140,例如:

ALTER DATABASE yourDatabase SET COMPATIBILITY_LEVEL = 140;

最小化代码。删除内容直到找到问题。查询是否在存储过程之外工作?仍然是相同的问题,关键字附近的语法不正确。您可能也在处理兼容性问题。将数据库兼容性设置为140,例如:`ALTER database yourDatabase Set compatibility_LEVEL=140;'没有足够的权限访问alter数据库。以上命令的用途是什么?谢谢,当设置兼容性_Level=140时,它会按预期工作。。。!