2011-04-28 6 views
2

InfoPath 2007을 사용하여 설문 조사를 보내고 있습니다 (SharePoint 또는 데이터베이스에 연결되어 있지 않음). 내가 다시 가져올 파일은 XML 파일입니다. 응답 블록이있는 모든 장소에는 고유 한 ID (일명 필드 이름)가 있습니다.XML에서 SQL 테이블 업데이트

이제 "응답"테이블이있는 SQL Server 데이터베이스 (2007?)가 있습니다. 해당 열은 다음과 같습니다. AnswerID (고유 PK), QuestionID (FK) (고유 ID (필드 이름) 및 응답) QuestionID에 고유 ID (필드 이름)가 이미 채워져 있습니다. QuestionID에 대해 300 개가 넘는 레코드가 있습니다

내가 할 수있는 일은 XML 파일에 도달하여 QuestionID (필드 이름)를 찾고 해당 필드 이름의 데이터를 가져온 다음 해당 데이터를 "응답"과 일치시키는 것입니다 QuestionID 열에서 필드 이름

이 매핑을 할 수있는 쉬운/매체 방법은 오류의 가능성의 최소 금액으로 업데이트/거기에 참고

:.?는 내가 사용하려고 DB 가져 오기 XML 데이터 마법사를 사용하면 정보를 관리하기 어려운 테이블로 나눌 수 있습니다.

답변

2

XML을 행과 열로 파쇄 한 다음이를 사용하여 테이블을 업데이트 할 수 있습니다. 다음은 할 수있는 일의 작은 예입니다.

create table Responses(QuestionID varchar(10), Answer varchar(10)) 

insert into Responses values('Q1', null) 
insert into Responses values('Q2', null) 
insert into Responses values('Q3', null) 

declare @xml xml 
set @xml = 
'<root> 
    <question ID="Q1">Answer1</question> 
    <question ID="Q2">Answer2</question> 
    <question ID="Q3">Answer3</question> 
</root>' 

;with cte as 
(
    select 
    r.n.value('@ID', 'varchar(10)') as QuestionID, 
    r.n.value('.', 'varchar(10)') as Answer 
    from @xml.nodes('/root/*') as r(n) 
) 
update R 
set Answer = C.Answer 
from Responses as R 
    inner join cte as C 
    on R.QuestionID = C.QuestionID 

select * 
from Responses 

결과 :

QuestionID Answer 
---------- ---------- 
Q1   Answer1 
Q2   Answer2 
Q3   Answer3 

난 당신이 가지고 있지만 그것은 당신에게 당신이 무엇을 할 수 있는지 힌트를 제공해야하는지 같은 것을 보이지 않는 가장 확실하게 사용되는 XML. XML 파일, 테이블 구조 및 예상 결과/출력 샘플을 게시하면보다 정확한 대답을 얻을 수 있습니다.

편집

declare @xml xml = 
'<?xml version="1.0" encoding="UTF-8"?> 
<my:myFields xmlns:my="xx.com" xml:lang="en-us"> 
    <my:group1> 
    <my:group2> 
     <my:field1>Im an analyst.</my:field1> 
     <my:group3> 
     <my:group4> 
      <my:field2>1</my:field2> 
      <my:field3>I click the mouse.</my:field3> 
     </my:group4> 
     <my:group4> 
      <my:field2>2</my:field2> 
      <my:field3>I type on the keyboard.</my:field3> 
     </my:group4> 
     </my:group3> 
    </my:group2> 
    <my:group2> 
     <my:field1>Im a stay at home mom.</my:field1> 
     <my:group3> 
     <my:group4> 
      <my:field2>1</my:field2> 
      <my:field3>I Cook.</my:field3> 
     </my:group4> 
     <my:group4> 
      <my:field2>2</my:field2> 
      <my:field3>I clean.</my:field3> 
     </my:group4> 
     </my:group3> 
    </my:group2> 
    </my:group1> 
</my:myFields>' 

;with xmlnamespaces('xx.com' as my) 
select 
    T.N.value('../../my:field1[1]', 'varchar(50)') as Field1, 
    T.N.value('my:field2[1]', 'varchar(50)') as Field2, 
    T.N.value('my:field3[1]', 'varchar(50)') as Field3 
from @xml.nodes('my:myFields/my:group1/my:group2/my:group3/my:group4') as T(N) 

결과 :

Field1     Field2  Field3 
Im an analyst.   1   I click the mouse. 
Im an analyst.   2   I type on the keyboard. 
Im a stay at home mom. 1   I Cook. 
Im a stay at home mom. 2   I clean. 
관련 문제