我是SQL Server中xquery的新手。 这是 ReponseRecord 表中 ErrorXml 列中的值。这是ErrorXML列的示例数据。
ROW1:
<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>
ROW3:
<Data />
如果该属性存在,我想在此处读取错误的值。
答案 0 :(得分:3)
使用.value从XML获取特定值,并检查节点/Data/Error
是否存在.exist。
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
答案 1 :(得分: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
干杯