У меня есть уровень репозитория данных, который обращается к таблице SQL в нашей базе данных с именем Form
.
Я пытаюсь написать оператор Merge
, который вставляет новый идентификатор, который является GUID, и обновляет запись, если идентификатор уже есть. Однако моя проблема в том, что я не знаю идентификатор, если он не создан.
Я не могу понять это. Это заставило меня задуматься, сработает ли вообще мое утверждение.
Это мой код:
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 для Id (я оставил его с ???). Запрос — это объект, который содержит некоторые данные из другой таблицы, а документ — это XML-документ.
Любые предложения по этому поводу были бы большим подспорьем.
@Id
, и если он найден, то он не создан - person Nick.McDermaid   schedule 27.01.2016conn.ExecuteScalar<Guid>(
? Я не узнаю это. Вы должны пометить свой вопрос технологиями, задействованными здесь. - person TT.   schedule 27.01.2016@Id
в каждом случае? - person Marc Gravell   schedule 27.01.2016OUTPUT
в оператореMERGE
. Вот пример: stackoverflow.com/questions/13620044/ - person Nick.McDermaid   schedule 28.01.2016