私は複雑な主キーを持つテーブルを持っています。また、私は基本的に次のようなXMLメッセージを受信した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)です。
メッセージの最新のタイムスタンプで別個の値だけを挿入する方法はありますか?
はい、これはまさに私が必要なものです!属性についてのあなたのコメントをありがとう、私はこれを考慮に入れます。 –