sp 사용xml_preparedocument XML 문 서 를 처리 하 는 방법

때때로 저장 과정 에서 XML 형식의 데 이 터 를 처리 하기 때문에sp_xml_preparedocumentXML 데 이 터 를 읽 은 다음 MSXML 분석 기(Msxmlsql.dll)를 사용 하여 분석 할 수 있다.우 리 는 저장 과정 에서 XML 에서 우리 가 원 하 는 데 이 터 를 쉽게 얻 을 수 있다.아래 코드 는 sp 를 사용 합 니 다.xml_preparedocument 읽 기 XML:
 
DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
위 에 XML 만 읽 었 을 뿐 XML 데 이 터 를 얻 으 려 면 OPEnXML 을 사용 해 야 합 니 다.코드 는 다음 과 같 습 니 다
 
SELECT *
FROM openxml(@hdoc,'/ROOT/Customer',1)
WITH (CustomerID VARCHAR(40),ContactName VARCHAR(40))
OPEnXML 에는 세 가지 인자 가 있 습 니 다.첫 번 째 는 sp 입 니 다.xml_preparedocument 읽 기 는 OUTPUT 인 자 를 읽 습 니 다.이 예제 에서@hdoc 입 니 다.두 번 째 는 지정 한 위치의 데 이 터 를 가 져 오 는 XPath 표현 식 입 니 다.세 번 째 는 가 져 오 는 방식 을 나타 내 는 옵션 입 니 다.0,1,2,8 네 가지 수치 가 있 습 니 다.상세 한 설명 은 FROM 뒤의 WITH 도 선택 할 수 있 습 니 다.어떤 데이터 필드 를 가 져 올 지 지정 하 는 데 사 용 됩 니 다.위 코드 에 CustomerID 와 ContactName 만 가 져 왔 습 니 다.위의 조회 결 과 는 다음 과 같다.CustomerID ContactName――――――――――――――――――――――――――――――――-VINET Paul Henriot LILAS Carlos Gonzlez 가 WITH 자 구 를 지정 하지 않 으 면 기본 표 구 조 를 조회 한 것 은 다음 과 같다.

표 열 에 대한 설명:
열명
데이터 형식
설명 하 다.
id
bigint
문서 노드 의 유일한 ID 입 니 다.
루트 요소 의 ID 값 은 0 입 니 다.마이너스 ID 값 을 유지 합 니 다.
parentid
bigint
표지 노드 의 부모 노드.이 ID 표지 의 부모 노드 가 반드시 부모 요소 가 아 닙 니 다.구체 적 인 상황 은 이 ID 에 표 시 된 노드 의 하위 노드 의 노드 유형 에 달 려 있다.예 를 들 어 노드 가 텍스트 노드 라면 부모 노드 는 속성 노드 일 수 있 습 니 다.
노드 가 XML 문서 의 맨 위 에 있 으 면 ParentID 는 NULL 입 니 다.
노드 종류
int
표지 노드 유형 은 XML 대상 모델(DOM)노드 유형 번호 에 대응 하 는 정수 이다.
다음 값 은 이 열 에 노드 형식 을 표시 할 수 있 는 값 입 니 다.
1=원소 노드
2=속성 노드
3=텍스트 노드
4=CDATA 부분 노드
5=실체 참조 노드
6=실체 노드
7=처리 명령 노드
8=주석 노드
9=문서 노드
10=문서 형식 노드
11=문서 세 션 노드
12=표시 법 노드
자세 한 정 보 는 Microsoft XML(MSXML)SDK 의'노드 유형 속성'테 마 를 참조 하 십시오.
localname
nvarchar(max)
요소 나 속성 을 제공 하 는 로 컬 이름 입 니 다.DOM 대상 에 이름 이 없 으 면 NULL 입 니 다.
prefix
nvarchar(max)
노드 이름 의 네 임 스페이스 접두사 입 니 다.
namespaceuri
nvarchar(max)
노드 의 네 임 스페이스 URI 입 니 다.값 이 NULL 이면 네 임 스페이스 가 존재 하지 않 습 니 다.
datatype
nvarchar(max)
원소 나 속성 줄 의 실제 데이터 형식,그렇지 않 으 면 NULL 입 니 다.데이터 형식 은 내 연 DTD 에서 추정 되 거나 내 연 구조 에서 추정 된다.
prev
bigint
이전 동급 원소 의 XML ID 입 니 다.앞 에 동급 원소 가 없 으 면 NULL 입 니 다.
text
ntext
텍스트 형식의 속성 값 이나 요소 내용 을 포함 합 니 다.가장자리 표 항목 에 값 이 필요 하지 않 으 면 NULL 입 니 다.
WITH 자구 에서우 리 는 또한 설정 을 통 해 부모 요소 의 속성 치 를 얻 을 수 있다.속성 으로 존재 하 는 것 이 아니 라 노드 에 직접 놓 는 것 입 니 다.다음 과 같 습 니 다
 
DECLARE @hdoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order OrderID="10248" CustomerID="VINET" EmployeeID="5"
OrderDate="1996-07-04T00:00:00">
<OrderDetail ProductID="11" Quantity="12"/>
<OrderDetail ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order OrderID="10283" CustomerID="LILAS" EmployeeID="3"
OrderDate="1996-08-16T00:00:00">
<OrderDetail ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'

EXEC sp_xml_preparedocument @hdoc OUTPUT, @doc
SELECT *
FROM OPENXML (@hdoc, '/ROOT/Customer/Order/OrderDetail',2)
WITH (OrderID int '../@OrderID',
CustomerID varchar(10) '../@CustomerID',
OrderDate datetime '../@OrderDate',
ProdID int '@ProductID',
Qty int '@Quantity')
이때 Order 노드 의 각종 값 을 얻 으 려 면다음 방법 을 사용 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기