【发布时间】: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