【问题标题】:Return XML data from Nvarchar(MAX)从 Nvarchar(MAX) 返回 XML 数据
【发布时间】:2017-02-24 18:39:18
【问题描述】:

我需要一些帮助,从存储 XML 数据的 nvarchar(max) 列中提取数据。

这是示例数据。

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <string>B1-10</string>
  <string>B2-20</string>
  <string>B2-20</string>
</ArrayOfstring>

我已经尝试过了,只返回 NULL 的然后错误输出到“XML 解析:第 1 行,字符 2,非法限定名称字符”

SELECT cast(COLUMNNAME AS xml).value('/ArrayOfString[1]/String[1]', 'VARCHAR(MAX)')
FROM dbo.TABLENAME 

我在这个很棒的网站上尝试了很多想法,似乎都得到了相同的结果。我在这里想念什么?提前感谢您的帮助。

【问题讨论】:

  • 如果您说列存储 XML 类型,我不确定您为什么要转换 XML?
  • 如果您需要 XML 数据作为关系数据,您可以查看此帖子 stackoverflow.com/questions/38826788/…
  • 出于好奇,您是否尝试过首先将值包装在 CAST AS VARCHAR(4000) 中以“向下转换”它?
  • 我确实尝试过“向下投射”,结果相同。感谢您的意见。
  • 我在尝试将字符串转换为 xml 时经常遇到这个“非法字符”错误。那里通常有一些(有时是不可见的)角色。一旦找到非法字符,我就使用 REPLACE() 去除它们。粘贴到 NotePad++ 之类的东西会有所帮助。我有两个例子是 REPLACE(@v, CHAR(0), CHAR(32)) - 消除尾随空值(来自 blob/二进制列)和 REPLACE(@v, '', '7' ) -- 消除非法的 xml 字符 7 ...一些序列化层将 放入。所以寻找这样的东西。

标签: sql-server xml tsql xml-parsing


【解决方案1】:

试试这个:

;WITH XMLNAMESPACES(DEFAULT 'http://schemas.microsoft.com/2003/10/Serialization/Arrays', 
                    'http://www.w3.org/2001/XMLSchema-instance' AS i)
SELECT cast(COLUMNNAME AS xml).value('(/ArrayOfstring/string)[1]', 'VARCHAR(MAX)')
FROM dbo.TABLENAME 

【讨论】:

  • 做到了。感谢您的所有帮助
  • 很高兴听到!如果这对您来说是正确的解决方案,请接受我的回答。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-07
  • 1970-01-01
  • 2010-09-26
  • 1970-01-01
  • 2017-01-13
  • 1970-01-01
  • 2019-08-01
相关资源
最近更新 更多