【问题标题】:Return XML cell data in XML query with SQL Server 2012使用 SQL Server 2012 在 XML 查询中返回 XML 单元格数据
【发布时间】:2015-03-26 12:05:47
【问题描述】:

我在 SQL Server 2012 中有一个表,其中包含一些客户数据。表中的一列包含存储为 XML 的许可证数据。单元格的类型是nvarchar(MAX)

是否可以使用FOR XML(或其他方法),以便在返回数据时,许可证数据中的 XML 包含为 XML 而不是格式化字符串?

如果我只是简单地使用 FOR XML RAW,那么结果是:

<Customers id="1" CustomerName="FirstCustomer" 
           LicenseData="&lt;license customerid=&quot;1&quot;&gt;...More data here...&lt;/license&gt;" />

我想得到的是:

<Customers id="1" CustomerName="FirstCustomer">
    <license customerid="1">
        ...More data here...
    </license>
</Customers>

有什么办法可以做到吗?

【问题讨论】:

  • Bad habits to kick : choosing the wrong data type - 你应该始终使用最合适的数据类型 - 毕竟这就是它们的用途!如果您的许可证数据确实总是 XML - 将其存储为 XML
  • 谢谢。不幸的是,我不是这个特定表的设计者,我只是在尝试使用它。我也许可以将数据类型更改为 XML,但我必须通过一些其他代码来确保我没有先破坏其他任何东西。

标签: sql-server xml sql-server-2012 sqlxml


【解决方案1】:

如果 XML 是一个有效的片段,那么您可以简单地将其 CAST 转换为 XML。

SELECT CAST(MyColumn as XML) as MyXml

【讨论】:

  • 谢谢两位的回答。它正是我需要的。在这种情况下,我实际上接受了 Rhys Jones 的回答,因为我不需要创建临时表来获取结果,只需查询和转换即可。
【解决方案2】:
declare @temp table (id int, customername nvarchar(128), data nvarchar(max))

insert into @temp
select 1, 'FirstCustomer', '<license customerid="1"><element id="2">data1</element><element id="3"/></license>'

select id, customername, cast(data as xml)
from @temp
for xml raw

你会得到这样的结果:

<row id="1" customername="FirstCustomer">
  <license customerid="1">
    <element id="2">data1</element>
    <element id="3" />
  </license>
</row>

【讨论】:

    猜你喜欢
    • 2012-04-05
    • 2018-01-26
    • 2020-02-06
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多