0

SQL Server の xquery は初めてです。これは、 ReponseRecordテーブルのErrorXml列の値です。これは、ErrorXML 列のサンプル データです。

行 1:

<Data>
  <Error PropertyName="CaseDisplayID">
    <ErrorMessage Type="Database">Claim is not in awaiting reprice response state. Current case state is ** Closed (Cancelled) **</ErrorMessage>
  </Error>
</Data>

行 2:

<Data><Error PropertyName="CaseDisplayID" /></Data>

行 3:

<Data />

その属性が存在する場合、ここでErrorの値を読み取りたいと思います。

4

2 に答える 2

3

.valueを使用して XML から特定の値を取得し、ノードが .exist で存在するかどうかを確認/Data/Errorます。

select T.ErrorXML.value('(/Data/Error/@PropertyName)[1]', 'nvarchar(50)') as PropertyName,
       T.ErrorXML.value('(/Data/Error/ErrorMessage/@Type)[1]', 'nvarchar(50)') as ErrorType,
       T.ErrorXML.value('(/Data/Error/ErrorMessage)[1]', 'nvarchar(max)') as ErrorMessage
from ReponseRecord as T
where T.ErrorXML.exist('/Data/Error') = 1

結果:

PropertyName    ErrorType       ErrorMessage
--------------- --------------- ----------------------------------------------------------------------------------------------------
CaseDisplayID   Database        Claim is not in awaiting reprice response state. Current case state is ** Closed (Cancelled) **
CaseDisplayID   NULL            NULL

SEデータ

于 2012-08-06T15:36:11.347 に答える
0

これが役立つかどうかを確認する

•特定のXMLノードがXMLドキュメントに存在するかどうかを確認するには:

SELECT xmlColumn.exist('declare namespace x="1"; (/x:ParentNode/x:ChildNode)') AS test
FROM dbo.Table
WHERE Column1=22

•XMLデータをクエリするには:

SELECT xmlColumn.query('declare namespace x="1"; (/x:ParentNode/x:ChildNode)') AS test
FROM dbo.Table
WHERE Column1=22

あなたの場合、名前空間が必要だとは思いません。その場合は、名前空間を削除するだけです。

SELECT xmlColumn.exist('/ParentNode/ChildNode') AS test
FROM dbo.Table
WHERE Column1=22

申し訳ありませんが、削除の例はありませんが、同じ方法です。「クエリ」または「存在」の代わりに、ここで確認できます。削除を使用するだけです。詳細については、こちらをご覧ください http://msdn.microsoft.com/en-us/library/ms190254.aspx

乾杯

于 2012-08-06T15:25:39.523 に答える