我有一个数据存储层,它访问我们数据库上的一个名为Form
.
我正在尝试编写一个Merge
语句,该语句插入一个作为 GUID 的新 Id,如果已经有一个 Id,则更新记录。但是,我的问题是,如果没有创建 ID,我不知道 ID。
我无法理解它。这让我思考我的陈述是否真的有效。
这是我的代码:
conn.ExecuteScalar<Guid>(
"MERGE INTO [dbo].[Form] AS TARGET USING(VALUES(@Id,@CreatedAt,@IsComplete,@Data)) AS SOURCE(Id,CreatedAt,IsComplete,[Data]) " +
"ON TARGET.Id = SOURCE.Id WHEN MATCHED THEN " +
"UPDATE SET CreatedAt = SOURCE.CreatedAt,IsComplete = SOURCE.IsComplete, [Data] = SOURCE.[Data] " +
"WHEN NOT MATCHED BY TARGET THEN " +
"INSERT(Id,CreatedAt,IsComplete,[Data]) " +
"VALUES(newId(),CreatedAt,IsComplete,[Data]) OUTPUT INSERTED.Id " +
"new{Id = ??????, CreatedAt = enquiry.EnquiryDate, IsComplete = 1, Data = doc});
我不确定要在 New for Id 中添加什么(我把它留在了???)。查询是一个对象,其中包含来自另一个表的一些数据,而文档是一个 XML 文档。
对此的任何建议都会有很大帮助。