【问题标题】:Select XML from varchar(max) column从 varchar(max) 列中选择 XML
【发布时间】:2010-12-13 14:03:22
【问题描述】:

我在 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>

如何选择“类型”、“键”以便从该列中的 XML 数据中获取单行的表格结果?该表有一个名为 HistoryId 的身份主键。

【问题讨论】:

  • 将列XML数据类型和我们的XPath不是更容易吗?
  • 可能,但这不是新的发展。我创建了这个表,我不记得我们当时是在 2005 年、2000 年还是 Oracle。我应该怎么做是另一个问题。

标签: sql-server xml


【解决方案1】:
;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)

【讨论】:

  • 谢谢!我必须做的唯一重大改变是 YourColumn 需要在转换为 xml 之前转换为 nvachar(max),因为编码是 utf-16。
【解决方案2】:

我的建议有两个。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 2017-06-20
    • 2012-05-29
    • 2010-10-03
    相关资源
    最近更新 更多