【问题标题】:T/SQL: Format results of SELECT on XML stored as nvarchar(max)T/SQL:对存储为 nvarchar(max) 的 XML 的 SELECT 格式结果
【发布时间】:2014-01-21 16:56:04
【问题描述】:

我不知道为什么,但我们的 nLog 配置现在存储为表中的 nvarchar(max) 列。在列上使用标准 SELECT,我得到如下输出:

<variable name="HeaderLayout".... 

我尝试使用“FOR XML AUTO”以及一系列 REPLACE 函数来从本专栏中获得漂亮、漂亮的 XML 输出。选项 A 不会自动将替换标记转换为 ,选项 B 真的很笨拙。有人可以推荐一个很好的为什么将配置检索为格式化的 XML 吗?

作为奖励,我希望能够以最少的努力获取格式化的 XML,进行更改,然后插入,但现在,我只是满足于能够使 SELECT 结果更多可读。

谢谢!

【问题讨论】:

    标签: sql-server xml tsql nlog


    【解决方案1】:

    首先将值转换为 XML。这将创建一个将整个 XML 作为单个值的 XML。 然后使用 value 函数从 XML 中获取该值,最后将获取的值转换回 XML。

    下面是一些使用表变量的代码,您可以对其进行测试。

    declare @T table
    (
      Col nvarchar(max)
    )
    
    insert into @T(Col)
    values('<root><item ID="1">textvalue</item></root>') 
    
    select cast(cast(T.Col as xml).value('.', 'nvarchar(max)') as xml) as XMLCol
    from @T as T
    

    结果:

    XMLCol
    -------------------------------------------
    <root><item ID="1">textvalue</item></root>
    

    【讨论】:

    • 您好,谢谢您的建议。我可以使用 SELECT 语句而不是实际文本来完成这项工作吗?例如:插入@T(Col) values((SELECT data FROM configuration where id = 4)) 我试过这个并从最终的 SELECT 中得到一个空列。不确定我是否需要进行调整。
    • @Purple 是的,当然。 table 变量只是为了给你一些玩的东西。您想使用最后一个选择。用你的表名称替换表,用你拥有的列名替换列名。
    【解决方案2】:

    试试FOR XML AUTO, TYPE。您能否提供一个查询示例?

    【讨论】:

    • 从 id = 4 的配置中选择数据
    • 使用“FOR XML AUTO, TYPE”似乎并没有更好。但是,“FOR XML AUTO, ELEMENT”至少将结果分成漂亮的行(插入一个长文本字符串)。 lt; &和GT;文字仍然显示为文本,而不是您在 XML 文件中期望的实际符号。
    猜你喜欢
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多