というデータベースの SQL テーブルにアクセスするデータ リポジトリ レイヤーがあります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});
Id の New に何を入力すればよいかわかりません (??? で残しました)。照会は、別のテーブルからのデータを含むオブジェクトであり、ドキュメントは XML ドキュメントです。
これに関する提案は大きな助けになります。