У меня есть таблица со сложным первичным ключом. Также у меня есть служба Service Broker, которая получает XML-сообщение, которое в основном выглядит следующим образом:
<TableName>
<CHANGED key1="1" key2="2" key3="3" timestamp="00:00:01"/>
<CHANGED key1="1" key2="2" key3="3" timestamp="00:00:02"/>
<CHANGED key1="1" key2="2" key3="3" timestamp="00:00:03"/>
</TableName>
Моя цель - вставить эти значения в таблицу.
Я попробовал следующий запрос:
INSERT INTO TableName (KEY1, KEY2, KEY3, TS)
SELECT
Tbl.Col.value('@*[1]', 'int'),
Tbl.Col.value('@*[2]', 'int'),
Tbl.Col.value('@*[3]', 'int'),
Tbl.Col.value('@*[4]', 'datetime')
FROM @MESSAGE.nodes('//CHANGED') Tbl(Col)
Но в случае, когда у нас есть несколько записей с одним и тем же сложным ключом (key1, key2, key3) и разной отметкой времени (значение, которое мне нужно для моей бизнес-логики), этот запрос завершается со следующим сообщением об ошибке:
Нарушение ограничения PRIMARY KEY 'TableName'. Не удается вставить повторяющийся ключ в объект «dbo.TableName». Повторяющееся значение ключа (1, 2, 3).
Есть ли способ вставить только отдельные значения с последней отметкой времени из этого сообщения?