Как прочитать значение XMLColumn из таблицы SQL Server

Я новичок в xquery в SQL Server. Это значение в столбце ErrorXml в таблице ReponseRecord. Вот как образец данных для столбца 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, если этот атрибут существует.


person Rita    schedule 06.08.2012    source источник


Ответы (2)


Используйте .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

SE-данные

person Mikael Eriksson    schedule 06.08.2012

Посмотрите, поможет ли это

• Чтобы проверить, существует ли определенный 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

Ваше здоровье

person j0N45    schedule 06.08.2012