Я хочу записать движение студентов, когда они проводят карточками по двери. Каждый раз, когда представляются идентификатор и имя карты, я хочу проверить, является ли это новой комбинацией, которой еще нет в таблице студентов. Если нет, вставьте новую запись, в которой FirstEntry и LastEntry будут той же датой, а cardid и имя — теми, которые отправлены в соответствующие параметры. Если комбинация уже присутствует, обновите только поле [LastEntry]. На данный момент мой запрос обновляет только существующие записи, что означает, что обновляется только поле [LastEntry]. Для обновления это нормально. Однако он не вставляет новую запись для новой записи. CardID и Name — составные первичные ключи в таблице.
- Я не хочу использовать метод IF Exists(Select...) для достижения этого.
- Я хочу использовать только MERGE.
- Это действие должно выполняться на той же таблице без использования временных таблиц.
- После выполнения действия я хочу увидеть затронутые записи в сценариях обновления или вставки. Будут показаны только следующие поля [cardid, name, FirstEntry, LastEntry], а не другие поля в таблице.
- В таблице есть другие столбцы, которые я не хочу показывать или возвращать.
Вот мое заявление, которое только обновляет
MERGE INTO
Students AS T
USING
(SELECT cardid, name, FirstEntry, LastEntry from Students where cardid = @id and name = @name) AS S
ON
(S.cardid = T.cardid
AND
S.name = T.name)
WHEN MATCHED THEN
UPDATE SET LastEntry = @DT
WHEN NOT MATCHED THEN
INSERT (cardid, name, FirstEntry, LastEntry) VALUES(@id, @name, @DT, @DT )
OUTPUT $action, S.cardid, S.name, S.FirstEntry, S.LastEntry;
Наряду с обновлениями я хочу, чтобы он также вставлял вставки для новых записей.
@id, @name
нет, то ничего не вставляется. - person A ツ   schedule 25.09.2015