Как запросить XML, хранящийся в виде текста? - PullRequest
3 голосов
/ 01 октября 2009

У меня есть таблица в базе данных SQL Server 2005, которая регистрирует покупки следующим образом:

ID (PK, int, not null)
Request (text, null)
Response (text, null)
MerchantId (varchar(14), null)
Amount (money, null)

Поля «Запрос» и «Ответ» действительно хранят XML. Я не могу изменить тип данных на XML. Мне нужно нарисовать запрос, который будет получать данные из 2 полей text-as-XML в дополнение к данным, которые находятся в самой таблице.

Я не уверен, с чего начать. Большинство моих поисков возвращаются с вопросами о LINQ-to-SQL, и результаты SQLXML, которые я получаю, не способны обрабатывать наборы данных. Где я должен сосредоточить свой поиск?

Ответы [ 5 ]

4 голосов
/ 01 октября 2009

Используйте CAST (текст AS XML), чтобы получить типизированный столбец XML, которым можно манипулировать на сервере (используйте для него значение, узлы и методы запроса xml ).

SELECT ID, 
  CAST(Request AS XML) As RequestXml,
  CAST(Request AS XML) As ResponsetXml,
  MerchantId,
  Amount
FROM <table>

Если вам нужен только XML в клиенте, вы можете просто вернуть текст и использовать любую XML-технологию на стороне клиента (XmlDocument, XPathDocument, Linq 2 xml), которую они all позволяют Вы должны создать фрагмент из строки.

2 голосов
/ 01 октября 2009
SELECT request.VALUE(/xpath/query)
FROM
(
    SELECT 
       CAST(Request as XML) request,
       CAST(Response as XML) response

    FROM purchaseTbl
    WHERE ...
) tbl
WHERE ...
2 голосов
/ 01 октября 2009

Вы можете разыграть данные на лету, например:

CAST(Request AS XML)
0 голосов
/ 01 октября 2009

Если вы используете сервер SQL (начиная с 2005 г.), одной из возможностей может быть написание пользовательской функции на языке .Net, которая анализирует XML из поля и возвращает эти данные как часть запроса

0 голосов
/ 01 октября 2009

Вы всегда можете CAST( [Request] AS XML ), а затем использовать все обычные функции XML для извлечения данных из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...