OPENXML

10246 단어 open
Transact - SQL 참조
OPENXML
OPENXML 은 XML 문 서 를 통 해 줄 집합 보 기 를 제공 합 니 다.OPEnXML 은 줄 집합 제공 프로그램 이기 때문에 줄 집합 제공 프로그램 (예 를 들 어 표, 보기 또는 OPEnrOWSET 함수) 이 나타 나 는 Transact - SQL 구문 에서 OPEnXML 을 사용 할 수 있 습 니 다.
문법
OPENXML(idoc int [in],rowpattern nvarchar[in],[flags byte[in]]) [WITH (SchemaDeclaration | TableName)]
매개 변수
idoc
XML 문서 의 내부 표 식 법의 문서 핸들 입 니 다.sp 호출 을 통 해xml_preparedocument 에서 XML 문 서 를 만 드 는 내부 표 법 입 니 다.
rowpattern
XPath 모드 입 니 다. 줄 로 처리 할 노드 를 표시 합 니 다. (이 노드 들 은 XML 문서 에서 이 문서 의 핸들 은 idoc 매개 변수 로 전 달 됩 니 다.)
flags
XML 데이터 와 관계 줄 집합 사이 에 맵 을 사용 하고 넘 치 는 열 을 어떻게 채 워 야 하 는 지 표시 합 니 다.flag 는 선택 가능 한 입력 매개 변수 로 다음 값 중 하나 일 수 있 습 니 다.
바이트 값
묘사 하 다.
0
기본 값 은 특성 중심의 맵 입 니 다.
1
특성 중심의 맵 을 사용 합 니 다.어떤 경우 에는 XML 과ELEMENTS 조합 사용.사용 할 때 먼저 특성 중심의 맵 을 적용 한 다음 에 처리 되 지 않 은 모든 열 에 요소 중심의 맵 을 적용 합 니 다.
2
요소 중심의 맵 을 사용 합 니 다.어떤 경우 에는 XML 과ATTRIBUTES 조합 사용.사용 할 때 먼저 특성 중심의 맵 을 적용 한 다음 에 처리 되 지 않 은 모든 열 에 요 소 를 중심 으로 하 는 맵 을 적용 합 니 다.
8
XMLATTRIBUTES 또는 XMLELEMENTS 조합 사용 (논리 OR).검색 한 컨 텍스트 에서 이 표 지 는 소 모 된 데 이 터 를 넘 치 는 속성 @ mp: xmltext 로 복사 해 서 는 안 된다 고 밝 혔 습 니 다.
SchemaDeclaration
창 구조 정의: ColName ColType [ColPattern | MetaProperty] [, ColName ColType [ColPattern | MetaProperty]...]
ColName
행 집중 의 열 명 이다.
ColType
줄 집중 열의 SQL 데이터 형식 입 니 다.열 형식 이 특성의 기본 XML 데이터 형식 과 다 르 면 형식 압축 이 발생 합 니 다.하면, 만약, 만약...
TIMESTAMP 는 OPEnXML 줄 에서 집중 적 으로 선택 할 때 XML 문서 의 기 존 값 을 무시 하고 자동 충전 값 을 되 돌려 줍 니 다.
ColPattern
XML 노드 를 열 에 어떻게 비 추 는 지 설명 하 는 일반적인 XPath 모드 입 니 다.하면, 만약, 만약...
ColPattern, 그러면 기본 맵 이 발생 합 니 다.
flags 가 지정 한 특성 중심 또는 요소 중심 맵).
ColPattern 으로 지 정 된 XPath 모드 는 특수 한 맵 성질 을 지정 하 는 데 사 용 됩 니 다. (특성 중심 과 요소 중심 맵 이 발생 하면) 이러한 특수 한 맵 성질 은 로고 가 지정 한 기본 맵 을 다시 쓰 거나 강화 할 수 있 습 니 다.
ColPattern 으로 지 정 된 일반적인 XPath 모드 도 메타 속성 을 지원 합 니 다.
MetaProperty
OPENXML 에서 제공 하 는 메타 속성 중 하나 입 니 다.메타 속성 을 지정 하면 이 열 은 메타 속성 이 제공 하 는 정 보 를 포함 합 니 다.이러한 메타 속성 은 XML 노드 의 정보 (예 를 들 어 상대 적 위치, 네 임 스페이스 정보) 를 분석 하여 텍스트 화 된 표현 법 보다 더 상세 한 정 보 를 제공 할 수 있 습 니 다.
TableName
기대 구조 가 있 는 표 가 존재 하고 열 모드 를 구하 지 않 으 면 주어진 표 이름 (SchemaDeclaration 이 아 닌) 입 니 다.
SchemaDeclaration 을 사용 하거나 기 존의 TableName 을 지정 합 니 다. WITH 자 구 는 줄 집합 형식 을 제공 합 니 다 (필요 에 따라 다른 맵 정 보 를 제공 합 니 다).선택 할 WITH 자 구 를 지정 하지 않 으 면 엣 지 테이블 형식 으로 결 과 를 되 돌려 줍 니 다.테두리 표 는 단일 표 에서 XML 문서 의 세밀 한 구조 (예 를 들 어 요소 / 특성 명, 문서 차원 구조, 명칭 공간, PI 등) 를 나타 낸다.
아래 표 는 가장자리 표 의 구 조 를 설명 한다.
열명
데이터 형식
묘사 하 다.
id
bigint
문서 노드 의 유일한 ID 입 니 다.루트 요소 의 ID 값 은 0 입 니 다.마이너스 ID 값 을 유지 합 니 다.
parentid
bigint
표지 노드 의 부모 노드.이 ID 에 표 시 된 부모 노드 는 반드시 부모 요소 가 아니 라 이 ID 에 표 시 된 노드 의 하위 노드 의 Node Type 에 달 려 있 습 니 다.예 를 들 어 노드 가 텍스트 노드 라면 부모 노드 는 특성 노드 일 수 있다.노드 가 XML 문서 의 맨 위 에 있 으 면 ParentID 는 NULL 입 니 다.
nodetype
int
표지 노드 유형.XML DOM 노드 유형 번호 에 대응 하 는 정수 (노드 정보, DOM 참조) 입 니 다.세 가지 노드 유형 은: 1 = 요소 노드 2 = 특성 노드 3 = 텍스트 노드
localname
nvarchar
요소 나 특성의 로 컬 이름 을 보 여 줍 니 다.DOM 대상 에 이름 이 없 으 면 NULL 입 니 다.
prefix
nvarchar
노드 이름 의 네 임 스페이스 접두사 입 니 다.
namespaceuri
nvarchar
노드 의 네 임 스페이스 URI 입 니 다.값 이 NULL 이면 네 임 스페이스 가 존재 하지 않 습 니 다.
datatype
nvarchar
요소 나 특성 줄 의 실제 데이터 형식 입 니 다. 그렇지 않 으 면 NULL 입 니 다.내장 DTD 에서 나 내장 구조 에서 데이터 형식 을 추정 합 니 다.
prev
bigint
이전 형제 요소 의 XML ID 입 니 다.앞 에 형제 요소 가 없 으 면 NULL 입 니 다.
text
ntext
텍스트 형식의 특성 값 이나 요소 내용 을 포함 합 니 다.
예시
A. OPEnXML 이 있 는 SELECT 문 구 를 사용 합 니 다.
아래 예제 사용 spxml_preparedocument 에서 XML 그림 의 내부 표 시 를 만 듭 니 다.그리고 XML 문서 의 내부 표현법 에 대해 OPEnXML 줄 집합 을 사용 하여 프로그램 을 제공 하 는 SELECT 문 구 를 실행 합 니 다.
flag 값 을 1 로 설정 하여 특성 중심의 맵 을 표시 합 니 다.따라서 XML 특성 은 줄 이 집 중 된 열 에 비 칩 니 다./ ROOT / customers 로 지정 한 rowpattern 표지 가 처리 할 < Customers > 노드 입 니 다.
XML 특성 이름과 일치 하기 때문에 선택 할 colpattern (열 모드) 이 지정 되 지 않 았 습 니 다.
OPEnXML 줄 집합 제공 자 는 두 줄 집합 (CustomerID 와 ContactName) 을 만 들 었 습 니 다. SELECT 문 구 는 이 줄 에서 필요 한 열 을 집중 적 으로 검색 합 니 다 (이 예 에서 모든 열 을 검색 합 니 다).
DECLARE @idoc 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>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))

다음은 결과 집:
CustomerID ContactName          
---------- --------------------
VINET Paul Henriot
LILAS Carlos Gonzlez

flags 를 2 (요소 중심의 맵 표시) 로 설정 하고 같은 SELECT 문 구 를 실행 하면 < Customers > 요소 에 하위 요소 가 없 기 때문에 XML 문서 의 두 Customer ID 와 ContactName 의 값 을 NULL 로 되 돌려 줍 니 다.
다음은 결과 집:
CustomerID ContactName
---------- -----------
NULL NULL
NULL NULL

B. 열 과 XML 특성 사이 의 맵 을 위 한 ColPattern 지정
다음 조 회 는 XML 문서 에서 고객 ID, 주문 날짜, 제품 ID 와 수량 등 기능 을 되 돌려 줍 니 다.rowpattern 표지 < OrderDetail > 요소.ProductID 와 Quantity 는 < Order Details > 요소 의 특성 입 니 다.customerID 와 OrderDate 는 부모 요소 (< Orders >) 의 특성 입 니 다.
선택 할 ColPattern 을 지정 합 니 다.
  • 줄 에 집 중 된 OrderID, CustomerID 와 OrderDate 열 은 XML 문서 에서 rowpattern 이 표시 하 는 노드 의 부모 노드 의 특성 을 나타 낸다.
  • 줄 에 집 중 된 ProdID 열 은 ProductID 특성 에 비 추고 줄 에 집 중 된 Qty 열 은 rowpattern 이 표시 하 는 노드 의 Quantity 특성 에 비 칩 니 다.

  • 요소 중심의 맵 은 flag 매개 변수 로 지정 되 어 있 지만 ColPattern 에서 지정 한 맵 은 이 맵 을 다시 씁 니 다.
    declare @idoc 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>'
    --Create an internal representation of the XML document.
    exec sp_xml_preparedocument @idoc OUTPUT, @doc
    -- SELECT stmt using OPENXML rowset provider
    SELECT *
    FROM OPENXML (@idoc, '/ROOT/Customer/Order/OrderDetail',2)
    WITH (OrderID int '../@OrderID',
    CustomerID varchar(10) '../@CustomerID',
    OrderDate datetime '../@OrderDate',
    ProdID int '@ProductID',
    Qty int '@Quantity')

    결 과 는 다음 과 같다.
    OrderID CustomerID           OrderDate                 ProdID    Qty
    ------------------------------------------------------------------------
    10248      VINET       1996-07-04 00:00:00.000   11      12
    10248 VINET 1996-07-04 00:00:00.000 42 10
    10283 LILAS 1996-08-16 00:00:00.000 72 3

    C. 테두리 표 형식의 결 과 를 얻 습 니 다.
    다음 예 에 서 는 OPENXML 구문 에 WITH 자 구 를 지정 하지 않 았 습 니 다.따라서 OPEnXML 에서 생 성 된 줄 집합 은 가장자리 표 형식 을 가지 고 있다.SELECT 문 구 는 가장자리 표 의 모든 열 을 되 돌려 줍 니 다.
    다음 예제 XML 문 서 는 < Customer >, < Order > 와 < Order0020_Details > 요소 구성.
    우선 sp 호출xml_preparedocument 에서 문서 핸들 을 가 져 옵 니 다.이 문서 의 핸들 은 OPEnXML 로 전 달 됩 니 다.
    OPEN XML 구문 에서
  • rowpattern (/ ROOT / customer) 표지 가 처리 해 야 할 < Customer > 노드.
  • WITH 자 구 는 제공 되 지 않 았 습 니 다.따라서 OPEnXML 은 가장자리 표 형식 으로 줄 집합 을 되 돌려 줍 니 다.

  • 마지막 으로 SELECT 문 구 는 가장자리 표 의 모든 열 을 검색 합 니 다.
    declare @idoc int
    declare @doc varchar(1000)
    set @doc ='
    <ROOT>
    <Customers CustomerID="VINET" ContactName="Paul Henriot">
    <Orders CustomerID="VINET" EmployeeID="5" OrderDate=
    "1996-07-04T00:00:00">
    <Order_x0020_Details OrderID="10248" ProductID="11" Quantity="12"/>
    <Order_x0020_Details OrderID="10248" ProductID="42" Quantity="10"/>
    </Orders>
    </Customers>
    <Customers CustomerID="LILAS" ContactName="Carlos Gonzlez">
    <Orders CustomerID="LILAS" EmployeeID="3" OrderDate=
    "1996-08-16T00:00:00">
    <Order_x0020_Details OrderID="10283" ProductID="72" Quantity="3"/>
    </Orders>
    </Customers>
    </ROOT>'
    --Create an internal representation of the XML document.
    exec sp_xml_preparedocument @idoc OUTPUT, @doc
    -- SELECT statement using OPENXML rowset provider
    SELECT *
    FROM OPENXML (@idoc, '/ROOT/Customers')
    EXEC sp_xml_removedocument @idoc

    결 과 는 가장자리 표 로 되 돌 아 왔 다.
     
    from :http://www.yesky.com/imagesnew/software/tsql/ts_oa-oz_5c89.htm

    좋은 웹페이지 즐겨찾기