我有一个带有复杂主键的表。此外,我还有一个接收 XML 消息的 Service Broker 服务,该消息基本上如下所示:
<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)和不同的时间戳(我的 biz 逻辑需要的值),此查询将失败并显示以下错误消息:
违反 PRIMARY KEY 约束“TableName”。无法在对象“dbo.TableName”中插入重复键。重复键值为 (1, 2, 3)。
有没有办法只插入具有来自该消息的最新时间戳的不同值?