如何在T SQL中对XML进行编码而又不增加XML开销

画了

我有一个数据库(无论出于何种原因)都有一个包含管道分隔数据的列。

我想快速解析这些数据,因此我想过通过将管道替换为XML属性并将其放入XML数据类型的列中,从而将该列(nvarchar)转换为XML。

它起作用,除非该列具有需要编码的字符,例如“ <”字符。

我发现我可以使用FOR XML子句对XML进行编码,但是,这似乎在数据周围注入了一些XML标签。

例如:(这会导致错误字符错误)

SELECT CAST('<f>' + replace(value,'|','</f><f>') + '</f>' AS XML)
FROM TABLE

这给出了xml编码的值,但是将其包装在“ <value> </ value>”标签中

  SELECT value
   FROM table
  FOR XML PATH('')

关于如何在不添加此额外标签的情况下如何获取XML编码值的任何想法,这样我就可以在完成后将管道格式转换为XML(最好是一次完成)?

编辑:由于人们在问,这就是5个潜在的数据行可能看起来像什么

foo
foo|bar
foo|bar|1
foo||
baz|

结果是

Col1, Col2, Col3
foo,null,null
foo,bar,null
foo,bar,1
foo,null,null
baz,null,null

我通过在子查询中使用生成的XML类型来实现此目的,例如:(在任何给定的行中最多可以有4列pr 3管道)

    SELECT 
          *,
         x.query('f[1]').value('.','nVarChar(2048)')  Col1
        ,x.query('f[2]').value('.','nVarChar(2048)')  Col2
        ,x.query('f[3]').value('.','nvarchar(2048)')  Col3
        ,x.query('f[4]').value('.','nvarchar(2048)')  Col4
    FROM
    (
        SELECT *,
        CAST('<f>' + REPLACE(Value,'|','</f><f>') + '</f>' AS XML) as x
     FROM  table
    ) y

@srutzky很有意思。不,我根本不需要在这里做XML。如果我能找到一种快速而干净的方法来解析基于集合的操作中的管道,那么我将这样做。将查看SQL#文档...

布鲁斯·邓维迪
SELECT CAST('<values><f>' + 
    REPLACE(
        REPLACE(
            REPLACE(
                REPLACE(
                    REPLACE(value,'&','&amp;')
                    ,'"','&quot;')
                ,'<','&lt;')
            ,'>','&gt;')
        ,'|','</f><f>') + '</f></values>' AS XML)
FROM TABLE;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在悬停时增加边框宽度而又不移走CSS中的div位置?

如何在dplyr中对许多列进行突变而又不重复多次?

您如何使用highcharter程序包在R Shiny中为折线图提供多个系列,而又不对系列进行硬编码?

如何在R中按组计算SD,而又不丢失在ggplot2中进行绘图所需的列?

如何在标头中增加徽标的高度而又不增加标头的实际高度?

如何在T-SQL中从XML读取选项?

如何在XML中编码特殊字符

如何在 SQL Server 2016 中添加带有编码的 XML 声明序言到 XML?

如何在整个应用程序中使用PHP类,而又不影响过多的开销性能

它的名称是什么以及如何在 xml 中对其进行编码?

您如何在终端上使用“ sips”来调整图像大小而又不进行放大?

如何在Cassandra中进行大量更新而又不造成停机?

如何在Java中对XML进行转义

如何在ImageView中从相机放映中获取图像而又不损失其在Android中的质量?

如何在T-SQL的XML类型中使用&字符?

在laravel中,如何创建多个帐户进行测试,而又不会收到太多电子邮件?

如何在 List<T> 类型的 Xml 类中赋值

如何在C ++中返回对象而又不会超出范围?

如何在Anaconda中卸载pip ipykernel而又不卸载ipykernel?

如何在FlatList中更改单个图标的颜色而又不同时更改它们的颜色

如何在Windows中通过命令行退出Firefox而又不强制退出?

如何在<div>中调整背景图像的亮度而又不影响前景项目?

如何在角度7中从阵列拼接元素而又不干扰主阵列

如何在脚本中减少使用而又不获取ESC转义字符?

如何在Haskell中旋转OpenGL图形而又不重新评估图形对象?

如何在列中输入一组值,而又不更改预先存在的条目?

如何在droid中制作拼图应用而又不会耗尽内存?

如何在Swift 4中使用Swift搜索到先前的屏幕而又不丢失数据

如何在熊猫中编辑姓氏,名字的顺序而又不丢失数据框