[英]Insert data into table in SQL Server from XML
我有像下面的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子片段列表 - 您需要從這些子節點獲取SubTaskId
和Hours
值以獲取所有信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.