2017-02-21 1 views
0

저는 신입 사원으로 제발 나와 함께하시기 바랍니다. 일부 XML 데이터를 Microsoft SQL Server로 전송하려고합니다. 열의 내용이 정적이 아니기 때문에이 데이터를 요소가 아닌 요소로 전송해야한다고 가정합니다.xml 데이터를 요소 (속성 아님)로 SQL에 전송하려고 시도했습니다.

그러나 어떤 이유로 데이터를 요소로 전송하려고 할 때 NULL 값을 얻습니다. 그러나이 동일한 데이터를 애트리뷰트로 전송하려고 시도하면 작동하고 예상되는 방식이 보인다. 나는 어깨를 으 tem하고 그냥 움직여야한다는 유혹을 받지만 나중에 길을 가면 상황이 잘못 될까봐 걱정됩니다.

속성으로 전달할 수있는이 XML의 일부 특성이 이미 하나의 테이블에 특성으로 위장하고있는 요소로 이미 포함되어 있습니다. 작동할까요? 그리고 만약 그렇다면 길 아래에 문제가있을 것입니까?

다음
SELECT * 
FROM OPENXML (@hdoc, '/roll/voter', 1) 
WITH (
id int, 
[value] char(50), 
[state] char(2)) 

입니다 : 내가 속성으로 요소를 전송하려고 할 때

다음
SELECT * 
FROM OPENXML (@hdoc, '/roll/voter', 2) 
WITH (
id int, 
[value] char(50), 
[state] char(2)) 

내 SQL 코드입니다 : 내가 요소로 요소를 전송하려고 할 때 다음

내 SQL 코드입니다 XML 문서의 소형화 된 버전 :

<roll> 
<voter id="400048" value="Yea" state="FL" /> 
<voter id="412516" value="Yea" state="CA" /> 
</roll> 

다음은 XML 문서의 링크입니다. 구글 드라이브 (매우 작은 XML)를 통해 ocument : https://drive.google.com/open?id=0B5VgOwWcGeLHaWctRU56Qlk3UWM

A screenshot of my SQL query, the table results, and the XML

+0

당신이 달성하려하고있는 것이 확실하지 않지만 첫 번째 구문의 올바른 구문은 WITH FROM OPENXML (@hdoc, '/ roll/voter', 2) WITH (id int '@id', [value] char (50) '@value', [state] char (2) '@state')'또는 이와 비슷한 것. – ZLK

+0

@ZLK 별칭을 사용하여 요소를 전송할 수있었습니다. 요소를 작동시키는 데 별칭이 필요 하나 속성에 불필요한가요? –

+0

첫 번째 쿼리에 별칭이 필요한 이유를 잘 모르겠습니다. –

답변

1

FROM OPENXML 오래된이며 (드문 예외가 존재) 더 이상 사용할 수 없습니다 ...

실제 XML 방법을 함께 시도 :

DECLARE @xml XML= 
N'<roll> 
<voter id="400048" value="Yea" state="FL" /> 
<voter id="412516" value="Yea" state="CA" /> 
</roll>'; 

SELECT @xml.value(N'(/roll/voter/@id)[1]',N'int') AS voter_id 
     ,@xml.value(N'(/roll/voter/@value)[1]',N'nvarchar(max)') AS voter_value 
     ,@xml.value(N'(/roll/voter/@state)[1]',N'nvarchar(max)') AS voter_state 

결과

,615,
관련 문제