テーブルと、同じクエリからテーブルの XML 列の 1 つの内容をクエリしようとしています。
基本的に次のような私のテーブルスキーマ:
CREATE TABLE AuditLogs
(
[AuditLogId] INT,
[ObjectType] VARCHAR(50),
[Action] VARCHAR(50),
[ObjectId] INT,
[Changes] XML
);
Changes
次のような列の XML を使用します。
<ArrayOfChange>
<Change FieldName="ItemStatus">
<OldValue>Unreconciled</OldValue>
<NewValue>Reconciled</NewValue>
</Change>
<Change FieldName="Amount">
<OldValue>50.00</OldValue>
<NewValue>45.00</NewValue>
</Change>
</ArrayOfChange>
最後に、私が切望している結果は次のとおりです。
AuditLogId
Action
ObjectType
ObjectId
FieldName
OldValue
NewValue
真の StackOverflow の伝統では、私はこれを自分でいくつか試み、ある程度の進歩を遂げました。私が抱えている問題は、OldValue 列と NewValue 列が常に null であることです。
私の最新バージョンは次のとおりです。
SELECT
[AuditLogId],
[Action],
[ObjectType],
[ObjectId],
c.n.value('@FieldName', 'varchar(50)') AS FieldName,
c.n.value('(OldValue)[0]', 'varchar(50)') AS OldValue,
c.n.value('(NewValue)[0]', 'varchar(50)') AS NewValue
FROM TMP
CROSS APPLY [Changes].nodes('/ArrayOfChange/Change') c(n)
今、私は生活を楽にするためにSQLFiddleを作成しました。