【问题标题】:SQL Server MERGE syntax unknown issue [closed]SQL Server MERGE 语法未知问题 [关闭]
【发布时间】:2020-03-31 01:26:19
【问题描述】:

我真的不知道我的程序出了什么问题,有人明白这个问题吗?

消息 102,级别 15,状态 1,过程 merge_table_from_json,第 19 行 [批处理开始第 0 行]
'tgt' 附近的语法不正确

我的代码:

ALTER PROCEDURE merge_table_from_json
    (@json nvarchar(max))
AS
BEGIN
    --  Delete From dbo.ExpensesScratch;
    --  Insert Into dbo.ExpensesScratch
    --  SELECT Id, Amount, StudentName 
    --  FROM OPENJSON(@json)
    --
    --  WITH (Id uniqueidentifier,
    --        Amount real, 
    --        StudentName NVARCHAR(50))

    MERGE dbo.Expenses AS tgt 
    USING dbo.ExpensesScratch AS src ON (tgt.Id = src.Id)

    WHEN MATCHED THEN 
        UPDATE SET tgt.Amount = src.Amount, 
                   tgt.StudentName = src.StudentName

    WHEN NOT MATCHED by tgt THEN
        INSERT (Id, Amount, StudentName) 
        VALUES (src.Id, src.Amount, src.StudentName)

    WHEN NOT MATCHED by src THEN 
        DELETE;  

    -- OUTPUT section,
    -- DELETED.Id AS tgtId,
    -- DELETED.StudentName AS tgtSudentName.
    -- DELETED.Amount AS tgtAmount,
    -- INSERTED.Id AS srcId,
    -- INSERTED.StudentName AS srcStudentName,
    -- INSERTED.Amount AS srcAmount

    SELECT @@ROWCOUNT
END

【问题讨论】:

标签: sql-server tsql merge


【解决方案1】:

tgt 我的别名应该是关键字目标

这是完成的产品!

ALTER PROCEDURE merge_table_from_json(@json nvarchar(max))
AS
BEGIN
    Delete From dbo.ExpensesScratch;
    Insert Into dbo.ExpensesScratch
    SELECT Id, Amount, StudentName 
        FROM OPENJSON(@json)
    WITH (  Id uniqueidentifier,
            Amount real, 
            StudentName NVARCHAR(50))

MERGE dbo.Expenses t 
    USING dbo.ExpensesScratch s
ON (s.Id = t.Id)
WHEN MATCHED
    THEN UPDATE SET 
        t.StudentName = s.StudentName,
        t.Amount = s.Amount
WHEN NOT MATCHED BY TARGET 
    THEN INSERT (Id, StudentName, Amount)
         VALUES (s.Id, s.StudentName, s.Amount)
WHEN NOT MATCHED BY SOURCE 
    THEN DELETE 
OUTPUT 
 $action,
   inserted.*,
   deleted.*;

SELECT @@ROWCOUNT

END

【讨论】:

  • 在截止时间后将其标记为答案,以便将来对其他人有所帮助
  • @VenkataramanR 可以!
猜你喜欢
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多