如何查询存储为文本的XML?

时间:2009-10-01 17:55:57

标签: sql sql-server xml

我在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 个答案:

答案 0 :(得分: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) all 允许您从字符串中构造片段。

答案 1 :(得分:2)

您可以动态投射数据,例如:

CAST(Request AS XML)

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

您始终可以CAST( [Request] AS XML )然后使用所有常规XML函数从中提取数据。

答案 4 :(得分:0)

如果您正在使用SQL服务器(2005年起),一种可能性是以.Net语言编写用户定义的函数,该函数从字段中解析XML并将该数据作为查询的一部分返回