2009-10-01 5 views
3

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

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

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

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

+0

Вы пытаетесь объединить запросы LINQ to SQL и LINQ to XML, или можете получить результаты из БД, а затем запросить XML отдельно? –

+0

Мне нужен набор результатов для подачи отчета SSRS. Это нужно делать исключительно на самом языке SQL, поскольку я не могу использовать SQLCLR или LINQ, чтобы сделать это проще. – JMP

+0

Затем сделайте то, что ответил Байрон Уитлок, отбросив в XML в производную таблицу, затем перетащите XML в реляционные поля, используя xquery/xpath. –

ответ

4

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

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) они все позволяют вы должны коснуться фрагмента из строки.

2

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

CAST(Request AS XML) 
0

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

2
SELECT request.VALUE(/xpath/query) 
FROM 
(
    SELECT 
     CAST(Request as XML) request, 
     CAST(Response as XML) response 

    FROM purchaseTbl 
    WHERE ... 
) tbl 
WHERE ... 
0

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

Смежные вопросы