使用 SQL 计算分成多行的 XML 字符串
Use SQL to Evaluate XML string broken into several rows
我有一个存储单个 XML 记录的应用程序,该记录分为 3 行,我假设是由于长度限制。前两行每行最多存储 4000 个字符,不幸的是,每条记录不会在同一位置中断。
我正在尝试找到一种方法将三行组合成一个完整的 XML 记录,然后我可以从中提取数据。
我试过连接行,但找不到数据类型或任何其他可以让我将三行拉入单个可读 XML 记录的数据类型。
我遇到了一些限制,因为我们 select 只能访问数据库,而我只能使用 SQL,因为我没有足够的访问权限来实现任何一种外部程序来提取那里的数据并使用其他东西对其进行操作。
如有任何想法,我们将不胜感激。
没有样本数据和预期结果,我们只能提供一种可能的方法。
由于您是 2017 年,您可以访问 string_agg()
这里我使用ID作为正确的顺序。
我应该补充一点,如果转换为 XML 失败,try_convert()
将 return 为 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
Returns
<root>
<name>XYZ Company</name>
</root>
EDIT 2014 Option
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)
我有一个存储单个 XML 记录的应用程序,该记录分为 3 行,我假设是由于长度限制。前两行每行最多存储 4000 个字符,不幸的是,每条记录不会在同一位置中断。
我正在尝试找到一种方法将三行组合成一个完整的 XML 记录,然后我可以从中提取数据。
我试过连接行,但找不到数据类型或任何其他可以让我将三行拉入单个可读 XML 记录的数据类型。
我遇到了一些限制,因为我们 select 只能访问数据库,而我只能使用 SQL,因为我没有足够的访问权限来实现任何一种外部程序来提取那里的数据并使用其他东西对其进行操作。
如有任何想法,我们将不胜感激。
没有样本数据和预期结果,我们只能提供一种可能的方法。
由于您是 2017 年,您可以访问 string_agg()
这里我使用ID作为正确的顺序。
我应该补充一点,如果转换为 XML 失败,try_convert()
将 return 为 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
Returns
<root>
<name>XYZ Company</name>
</root>
EDIT 2014 Option
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)