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 回答