从varchar(max)列中选择XML

时间:2010-12-13 14:03:23

标签: sql-server xml

我在SQL Server 2005上的varchar(max)列中存储了一些XML数据。数据的格式为(FQTN =完全限定类型名称):

<?xml version="1.0" encoding="utf-16"?>
<History xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <EntityViews>
    <EntityProxy Type="FQTN" Key="386876" />
    <EntityProxy Type="FQTN" Key="387981" />
    <!-- etc. -->
  </EntityViews>
</History>

如何选择Type,Key以便从此列的XML数据中获取单行的表格结果?该表具有名为HistoryId的标识主键。

2 个答案:

答案 0 :(得分:9)

;with cteCastToXML as (
    select CAST(YourColumn as xml) as x
        from YourTable
)
select h.ep.value('@Type','varchar(10)') as [Type],
       h.ep.value('@Key', 'varchar(10)') as [Key]
    from cteCastToXML
        cross apply x.nodes('/History/EntityViews/EntityProxy') as h(ep)

答案 1 :(得分:0)

我的建议是双重的。

  1. 如果您要对列进行此操作,请将列更改为XML列。
  2. 如果您需要执行此操作,请查看获取值并将其转换为XML,然后您可以像平常一样对其进行操作。 (这是关于如何转换的link。)