我的資料庫中有資料型別 xml 的列。
示例值如下所示。
<Responses>
<Response>
<task></task>
</Response>
<Response>
<task></task>
</Response>
<Response>
<task></task>
</Response>
</Responses>
因此,從上面的 xml 中,我需要提取每個節點并需要將其保存為另一個表中的不同行。從上面的示例中,將有 3 行。
uj5u.com熱心網友回復:
您可以使用以下 SQL XQuery 解決方案:
.query會給你一個完整的 XML 節點,而不是.value只給你一個內部值。
SELECT x.task.query('.') task
FROM @tmp t
CROSS APPLY t.XmlData.nodes('Responses/Response/task') x(task);
資料庫<>小提琴
輸出:
| 任務 |
|---|
<task>1</task> |
<task>2</task> |
<task>3</task> |
uj5u.com熱心網友回復:
嘗試以下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
namespace ConsoleApplication7
{
class Program
{
static void Main(string[] args)
{
string xml = @"<Responses>
<Response>
<task></task>
</Response>
<Response>
<task></task>
</Response>
<Response>
<task></task>
</Response>
</Responses>";
StringReader reader = new StringReader(xml);
DataSet ds = new DataSet();
ds.ReadXml(reader);
}
}
}
uj5u.com熱心網友回復:
嘗試使用 xml 列,查詢。您需要將字串列轉換為 xml,然后使用查詢。請參閱(SQL Server - 回傳 xml 列的 xml 子節點)
declare @tmp as table (ID UNIQUEIDENTIFIER,
CreatedDate DATETIME,
XmlData XML)
declare @xml as xml='<Responses>
<Response>
<task>1</task>
</Response>
<Response>
<task>2</task>
</Response>
<Response>
<task>3</task>
</Response>
</Responses>'
insert into @tmp(CreatedDate,XmlData) values(GetDate(),@xml)
select XmlData.query('Responses/Response/task') task from @tmp
輸出:
<task>1</task><task>2</task><task>3</task>
使用 xml 路徑節點和值
select X.Y.value('(task)[1]','int') task from @tmp t
cross apply t.XmlData.nodes('Responses/Response') as X(Y)
輸出
task
1
2
3
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/385832.html
