如何使用存储过程将xml格式数据拆分为sql server 2008中的行列格式

时间:2013-08-26 10:16:22

标签: sql-server-2008

我正在收到asp.net网络服务的回复,如下面所述。我想以年龄列中的年龄和日期列中的日期的表格格式转换它。我之前已经问过这个问题,但是现在它是一个字符串,现在在xml中得到o / p我该怎么办?

以这种格式获取@response中的响应输出:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://abc.org/">age=7|Date=15/04/2006^age=5|Date=15/04/2008</string>

如何使用存储过程将其拆分为sql server 2008中的行列格式。我将@response作为上述表单但无法使用我正在执行的方式。任何人都可以帮助我。

2 个答案:

答案 0 :(得分:2)

使用您选择的string split function并在^首先和|秒后分开。之后,您可以使用pivot将数据添加到列中。

declare @XML xml = '<?xml version="1.0" encoding="utf-8"?><string xmlns="http://abc.org/">age=7|Date=15/04/2006^age=5|Date=15/04/2008</string>';

with xmlnamespaces(default 'http://abc.org/')
select P.age,
       P.Date
from (
     select S1.ID,
            left(S2.Item, charindex('=', S2.Item) - 1) ColName,
            stuff(S2.Item, 1, charindex('=', S2.Item), '') Value
     from SplitString(@XML.value('string[1]', 'varchar(max)'), '^') as S1
       cross apply SplitString(S1.Item, '|') as S2
     ) as X
  pivot
    (
    min(X.Value)  
    for X.ColName in (age, Date)
    ) as P;

SQL Fiddle

答案 1 :(得分:0)

如果要在SQL Server中执行此操作,则必须编写一个.NET CLR存储过程来读取文本字符串,将其拆分为“|”字符,然后插入/分配给您的表/对象。请参阅此文http://msdn.microsoft.com/en-us/library/5czye81z(v=vs.90).aspx