使用SQL评估分成几行的XML字符串

问题描述 投票:1回答:1

我有一个应用程序,它存储一个XML记录,该记录分为3个单独的行,由于长度限制,我假设。前两行每行最大存储容量为4000个字符,但是不幸的是,每条记录在同一位置没有中断。

我正在尝试找到一种将三行合并为完整的XML记录的方法,然后可以从中提取数据。

我尝试连接行,但是找不到数据类型或其他任何可以让我将三行拉入单个可读XML记录的东西。

我有几个限制,因为我们只能选择访问数据库,而我只能使用SQL,因为我没有足够的访问权来实现任何类型的外部程序来提取那里的数据用其他东西操纵它。

任何想法都将不胜感激。

tsql sql-server-2014
1个回答
0
投票

没有样本数据和所需结果,我们只能提供一种可能的方法。

自2017年起,您可以访问string_agg()

这里我使用ID作为正确的顺序。

我应该补充一点,如果到XML的转换失败,try_convert()将返回NULL。

示例

Declare @YourTable table (ID int,SomeCol varchar(4000))
Insert Into @YourTable values
 (1,'<root><name>XYZ Co')
,(2,'mpany</')
,(3,'name></root>')

Select try_convert(xml,string_agg(SomeCol,'') within group (order by ID) )
 From  @YourTable

返回

<root>
  <name>XYZ Company</name>
</root>

EDIT 2014选项

Select try_convert(xml,(Select '' + SomeCol
                         From  @YourTable 
                         Order By ID
                         For XML Path(''), TYPE).value('.', 'varchar(max)')
        )

或偶数

Declare @S varchar(max) = ''

Select @S=@S+SomeCol
 From  @YourTable
 Order By ID

Select try_convert(xml,@S)
© www.soinside.com 2019 - 2024. All rights reserved.