2016-08-30 4 views
3

아래와 같이 xml이 있습니다. 테이블에 삽입하고 싶습니다. 그리고 2 레코드를 삽입하려고 합니다만, 단 하나의 레코드 만 삽입합니다.XML에서 SQL Server의 테이블에 데이터를 삽입하십시오.

샘플 XML은 :

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 
,691이 내 삽입 문

<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> 

입니다

+0

잘못된 xml 구조가 있습니다. 나는 각 하위 작업마다 taskID 태그를 사용해야한다고 생각한다. –

답변

2

에 대한 두 번째 호출을 사용하여 가질 수있는 복수 <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 값을 가져와야합니다.

+0

자사의 작동이 – Dhanalakshmi

+1

@ user3791199에 고맙습니다.이 답변을 통해 문제를 해결하는 데 도움이되었다고 생각되면 [**이 대답 수락 **] (http://meta.stackoverflow.com/q/5234/153998)를 참조하십시오. 이것은 * 당신을 돕기 위해 자신의 시간을 보낸 * 사람들에게 감사를 표합니다. –

관련 문제