【问题标题】:My Merge statement is failing我的合并语句失败
【发布时间】:2016-01-05 13:34:21
【问题描述】:

我有一个将值插入数据库的合并语句。我遇到异常点并出现异常错误

MERGE 语句必须以分号 (;) 结束。

这是我的声明。谁能指出我错过了什么?

using (var masterDb  = new SqlConnection(ConfigurationManager.ConnectionStrings["MasterDB"].ConnectionString))
{
    masterDb.Open();
    if (data != null)
        try
        {
            conn.Execute(
                "MERGE INTO [dbo].[FormSubmissions] AS TARGET " +
                "USING(VALUES(@Id,@CreatedAt,@UpdatedAt,@IsComplete,@FormId,[@Source],@SentEmail)) AS SOURCE (Id,CreatedAt,UpdatedAt,IsComplete,FormId,[Source],SentEmail) " +
                "ON TARGET.Id = SOURCE.Id " +
                "WHEN MATCHED THEN " +
                "UPDATE SET CreatedAt = SOURCE.CreatedAt,UpdatedAt = SOURCE.UpdatedAt,IsComplete = SOURCE.IsComplete, FormId = SOURCE.FormId, [Source] = SOURCE.[Source], SentEmail = SOURCE.SentEmail " +
                "WHEN NOT MATCHED BY TARGET THEN " +
                "INSERT(Id,CreatedAt,UpdatedAt,IsComplete,FormId,[Source],SentEmail) " +
                "VALUES(Id,CreatedAt,UpdatedAt,IsComplete,FormId,[Source],SentEmail)",
                new
                {
                    Id = formSubmissionsId,
                    CreatedAt = data.CreatedAt,
                    UpdatedAt = data.UpdatedAt,
                    IsComplete = data.IsComplete,
                    FormId = data.FormId,
                    Source = data.Source,
                    SentEmail = data.SentEmail
                });
        }
        catch (Exception ex)
        {
            throw;   
        }
        finally
        {
            masterDb.Close();
        }
};
conn.Close();
}

【问题讨论】:

  • 信息很清楚,最后加分号..,SentEmail);",
  • @Mihai 你要我在哪里添加 ;因为我在 catch 语句之前已经有了一个
  • Mihai 告诉您在 conn.Execute() 方法中的 String 参数末尾添加分号;即这里:“VALUES(Id,CreatedAt,UpdatedAt,IsComplete,FormId,[Source],SentEmail)" + ";"
  • 很抱歉我没有第一次抓住它。@Mihai @bandreid

标签: c# sql-server merge-statement


【解决方案1】:

正如错误所说,在语句的末尾添加一个分号。所以你的 Execute 应该如下所示。

conn.Execute(
     "MERGE INTO [dbo].[FormSubmissions] AS TARGET " +
     "USING(VALUES(@Id,@CreatedAt,@UpdatedAt,@IsComplete,@FormId,[@Source],@SentEmail)) AS SOURCE (Id,CreatedAt,UpdatedAt,IsComplete,FormId,[Source],SentEmail) " +
     "ON TARGET.Id = SOURCE.Id " +
     "WHEN MATCHED THEN " +
     "UPDATE SET CreatedAt = SOURCE.CreatedAt,UpdatedAt = SOURCE.UpdatedAt,IsComplete = SOURCE.IsComplete, FormId = SOURCE.FormId,  [Source] = SOURCE.[Source], SentEmail = SOURCE.SentEmail " +
     "WHEN NOT MATCHED BY TARGET THEN " +
     "INSERT(Id,CreatedAt,UpdatedAt,IsComplete,FormId,[Source],SentEmail) " +
     "VALUES(Id,CreatedAt,UpdatedAt,IsComplete,FormId,[Source],SentEmail);",
new
    {
      Id = formSubmissionsId,
      CreatedAt = data.CreatedAt,
      UpdatedAt = data.UpdatedAt,
      IsComplete = data.IsComplete,
      FormId = data.FormId,
      Source = data.Source,
      SentEmail = data.SentEmail
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2015-07-07
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多