gpt4 book ai didi

sql-server - 将数据从 XML 插入到 SQL Server 中的表中

转载 作者:行者123 更新时间:2023-12-01 01:48:43 28 4
gpt4 key购买 nike

我有如下所示的 xml。我想插入一个表,我希望插入 2 条记录,但它只插入一条记录。

示例 XML:

<xmlSubmitTime>
<submitTime>
<TaskDate>2016-08-29</TaskDate>
<Project>
<ProjectId>9</ProjectId>
<Task>
<TaskId>5</TaskId>
<SubTask>
<SubTaskId>4</SubTaskId>
<Hours>2</Hours>
<Comment>sample string 4</Comment>
</SubTask>
<SubTask>
<SubTaskId>5</SubTaskId>
<Hours>6</Hours>
<Comment>sample string 4</Comment>
</SubTask>
</Task>
</Project>
</submitTime>
</xmlSubmitTime>

这是我的插入语句:

INSERT INTO Sample
SELECT
submitTime.value('(Project/ProjectId/text())[1]', 'int') ,
submitTime.value('(Project/Task/TaskId/text())[1]', 'int'),
submitTime.value('(Project/Task/SubTask/SubTaskId/text())[1]', 'int'),
submitTime.value('(TaskDate/text())[1]', 'date'),
submitTime.value('(Project/Task/SubTask/Hours/text())[1]', 'int'),
0,
submitTime.value('(Project/Task/SubTask/Comment/text())[1]', 'varchar(20)'),
FROM
@SaveTimeDate.nodes('/xmlSubmitTime/submitTime') AS TEMPTABLE(submitTime)

预期输出是:

ProjectID  TaskId SubtaskId Hours
----------------------------------
9 5 4 2
9 5 5 6

实际输出为:

ProjectID  TaskId SubtaskId Hours
---------------------------------
9 5 4 2

最佳答案

您需要再次调用 .nodes()处理多个 <SubTask>您可能拥有的条目。

试试这个:

SELECT
submitTime.value('(Project/ProjectId)[1]', 'int') ,
submitTime.value('(Project/Task/TaskId)[1]', 'int'),
subtask.value('(SubTaskId)[1]', 'int'),
subtask.value('(Hours)[1]', 'int')
FROM
@SaveTimeDate.nodes('/xmlSubmitTime/submitTime') AS TEMPTABLE(submitTime)
CROSS APPLY
submitTime.nodes('Project/Task/SubTask') AS XT(subtask)

这应该会返回您要查找的输出。你需要得到 /Project/Task/SubTask节点也作为 XML 子片段的列表 - 您需要获取 SubTaskIdHours从这些子节点中获取所有信息的值

关于sql-server - 将数据从 XML 插入到 SQL Server 中的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39231639/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com