xml 과 sql server 2000 에서 지원하는 xml 처리 방법 정 홍주 webtime feelanet

38
XML XML SQL Server 2000 SQL Server 2000 과과 과과과과 과과 과과과과 XML XML 과과 과과 과과 과과 과 과과 과 과과 WebTime WebTime Feelanet Feelanet

Upload: sherman-dalton

Post on 28-Jan-2016

257 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XMLXML 과 과 SQL Server 2000SQL Server 2000에서 지원하는 에서 지원하는 XML XML 처리 처리 방법 방법

정 홍주정 홍주

WebTimeWebTimeFeelanetFeelanet

Page 2: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

목차목차 .NET Framework.NET Framework SQLXMLSQLXML SQLXML SQLXML 과 관련된 과 관련된 XMLXML 기술기술 SQL Server 2000SQL Server 2000 에서의 에서의 XML XML 지원지원

Page 3: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

.NET Framework.NET Framework

WebServer

브라우저브라우저

World!World!ADO.NET ADO.NET / XML / XML / XML Schema/ XML Schema

HTML, XMLHTML, XML

OS

데이터 데이터 저장소저장소

HTTP HTTP HandlerHandler

/ASP.NET/ASP.NET

ADO.NETADO.NET

.NET .NET RMI / RMI / SOAPSOAP

컨텍스트컨텍스트

보안보안

트랜잭션트랜잭션

동시성동시성

ServicedServicedComponentComponent

ManagedManagedObjectObject

COM+ ServerCOM+ ServerCLRCLR

SOAP,XMLSOAP,XML

Page 4: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

.NET vs. SQLXML.NET vs. SQLXML

.NET.NET XML-Object Mapping LayerXML-Object Mapping Layer

XML SerializationXML Serialization XML-Relation Mapping LayerXML-Relation Mapping Layer

ADO.NETADO.NET SQLXMLSQLXML

XML-Relation Mapping LayerXML-Relation Mapping Layer

Page 5: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XML vs RelationalXML vs Relational

Relational format : data Relational format : data storagestorage 각 각 entity entity 의 의 instanceinstance 는 는 rowrow 각 각 entityentity 의 의 propertyproperty 는 는 columncolumn RelationshipsRelationships 은 은 key fieldkey field 를 기반으로를 기반으로

XML : data XML : data exchangeexchange 각 각 entityentity 의 의 instanceinstance 는 는 elementelement 각 각 entityentity 의 의 PropertiesProperties 는 는 value, value,

attribute, attribute, 또는 또는 child elementchild element RelationshipsRelationships 은 계층적으로 묘사은 계층적으로 묘사

Page 6: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

E-Commerce E-Commerce 시나리오시나리오

Retailer Shipper

Customer

Supplier

Purchase order

Catalog

Delivery requestExtranet

Web site

Intranet

Web site

Page 7: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

SQLXMLSQLXML

RDBRDB 의 구조적 데이터를 의 구조적 데이터를 XMLXML 로 변환로 변환 XMLXML 을 을 RDBRDB 의 구조적 데이터로 변환의 구조적 데이터로 변환 XML-Relation Mapping LayerXML-Relation Mapping Layer

<XML>

XML business document,e.g., purchase order

Retailer Supplier

Page 8: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

SQLXML ArchitectureSQLXML Architecture

IIS ISAPI

ADOHTTP

COM

AnnotatedSchemas

SQL ServerSQLOLEDB

Client Middle Tier SQL Server

Translation of: Updategrams Query templates XPath queries

SQL executed: Open XML T-SQL Update Insert Delete Select…For XML

Updategram

Query request

Page 9: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

SQLXML ArchitectureSQLXML Architecture

Page 10: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

SQLSQLXML XML 과 관련된 과 관련된 XMLXML기술기술 XML SchemaXML Schema XPath XPath XSLTXSLT

Page 11: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XML SchemaXML Schema

SchemaSchema 는 는 XML XML 문서의 규약을 동의문서의 규약을 동의 element, attribute element, attribute –– 데이터타입데이터타입 , , 순서순서 , ,

길이길이 , , 최대최대 // 최소값최소값

<XML>

XML business document,e.g., purchase order

Retailer Supplier

Schema

Page 12: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

"urn:nwtraders""urn:nwtraders"

XPathXPath

XPath XPath 는 는 W3C XML Path LanguageW3C XML Path Language XPathXPath 를 이용 를 이용 XML XML 문서를 문서를

네비게이션네비게이션 ,, 검색검색 ,, 조작조작 XPathXPath 는 는 DOM, XQuery, DOM, XQuery,

XSL, XSLTXSL, XSLT 과 같이 사용됨과 같이 사용됨

<Plants xmlns="urn:nwtraders">

<?proc instr?> <!--comment-->

<ItemName code="123"> Clematis </ItemName>

</Plants>

<Plants xmlns="urn:nwtraders">

<?proc instr?> <!--comment-->

<ItemName code="123"> Clematis </ItemName>

</Plants> "123""123" "Clematis""Clematis"

RootRoot

"urn:nwtraders""urn:nwtraders"

"comment ""comment "

"proc-instr""proc-instr"

<ItemName><ItemName>

<Plants><Plants>

Page 13: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XPathXPath

XPath XPath 표준 표준 navigation languagenavigation language XML XML 계층구조로부터 계층구조로부터 XPathXPath 쿼리로 노드를 쿼리로 노드를

리턴리턴 모든 모든 OrderDetail OrderDetail 요소들요소들 ProductIDProductID 특성이 특성이 2323 인 인 OrderDetail OrderDetail

요소들요소들

Quantity Quantity 가 가 1 1 보다 큰 요소를 가진 보다 큰 요소를 가진 OrderDetail OrderDetail 요소요소

Order/OrderDetail[@ProductID='23']Order/OrderDetail[@ProductID='23']

Order/OrderDetail[Quantity > 1]Order/OrderDetail[Quantity > 1]

Order/OrderDetailOrder/OrderDetail

Page 14: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XSLTXSLT

XSLT XSLT 는 는 W3C XSL Transformations W3C XSL Transformations languagelanguage

XPathXPath 와 같이 사용와 같이 사용 XML vocabulariesXML vocabularies 와 포맷으로 변환하는데 사용와 포맷으로 변환하는데 사용

XML vocabulary 변환 XML 을 HTML 이나 text 로 변환

<Plant ID="3">Lemon</Plant><Plant ID="3">Lemon</Plant>

<Plant> <Name>Lemon</Name>

<SKU>3</SKU></Plant>

<Plant> <Name>Lemon</Name>

<SKU>3</SKU></Plant>

XMLXML HTMLHTML

Page 15: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XSLTXSLT

XSL XSL 스타일 시트를 적용시스타일 시트를 적용시 XMLXML 문서를 다른 포맷문서를 다른 포맷 (HTML)(HTML) 으로 변환으로 변환 XMLXML 문서를 또 다른 포맷문서를 또 다른 포맷 (XML,WML)(XML,WML) 으로 으로

변환변환

XML

XSL

Page 16: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XSLT & XPathXSLT & XPath

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/"> <xsl:apply-templates select="employees/employee">

<xsl:sort select="name" /> </xsl:apply-templates> </xsl:template>

</xsl:stylesheet>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/"> <xsl:apply-templates select="employees/employee">

<xsl:sort select="name" /> </xsl:apply-templates> </xsl:template>

</xsl:stylesheet>

로트노트로 부터 employee name 을 리스트로트노트로 부터 employee name 을 리스트

XPath

루트노드루트노드

<employees> 밑의 <employee><employees> 밑의 <employee>

<name> 로 정렬<name> 로 정렬

Page 17: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

SQL Server 2000SQL Server 2000 에서의 에서의 XML XML 지원지원 SQL Server SQL Server DataData 를 를 XMLXML 로 처리하는 방법로 처리하는 방법 Transact-SQLTransact-SQL XMLXML 을 이용한 을 이용한 SQLSQL Server Server Data Data 변경변경

Page 18: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XMLXML 을 처리하는 방법을 처리하는 방법 System.DataSystem.Data System.XmlSystem.Xml T-SQLT-SQL UpdateGram/Bulk LoadUpdateGram/Bulk Load SOAP/WSDLSOAP/WSDL SQLOLEDB/SQLXMLOLEDBSQLOLEDB/SQLXMLOLEDB Managed SQLXML ClassManaged SQLXML Class BiztalkBiztalk ……,,

Page 19: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Transact-SQLTransact-SQL

SELECT ... FOR XMLSELECT ... FOR XML 결과셋이 결과셋이 XML streamXML stream 으로 리턴으로 리턴 relational datarelational data 를 를 XMLXML 로 검색로 검색

OpenXMLOpenXML XML streamXML stream 을 을 rowsetrowset 으로 리턴으로 리턴 XML dataXML data 를 를 relational tablesrelational tables 로 로 InsertInsert

Page 20: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XMLXML 을 이용한 을 이용한 SQLSQL Server Server Data Data 변경변경 XML UpdategramsXML Updategrams

추가추가 ,, 수정수정 ,, 삭제시 삭제시 XML documentXML document 을 사용을 사용 XML Bulk Loader ComponentXML Bulk Loader Component

COM component COM component XML XML datadata 의 의 bulk-loadbulk-load 시 시

Page 21: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

FOR XMLFOR XML

FOR XML FOR XML 구문구문

XML Document FragmentsXML Document Fragments

SELECT select_listFROM table_sourceWHERE search_conditionFOR XML RAW | AUTO | EXPLICIT [, XMLDATA] [, ELEMENTS] [, BINARY BASE64]

SELECT select_listFROM table_sourceWHERE search_conditionFOR XML RAW | AUTO | EXPLICIT [, XMLDATA] [, ELEMENTS] [, BINARY BASE64]

<Order OrderID="10248" OrderDate="07/04/1996"/><Order OrderID="10249" OrderDate="07/05/1996"/>

<Order OrderID="10248" OrderDate="07/04/1996"/><Order OrderID="10249" OrderDate="07/05/1996"/>

Page 22: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

SQL Server SQL Server GenerateGenerate

ROWSET

TDS/Token XML

SELECT …FROM …WHERE …FOR XML MODE

SELECT …FROM …WHERE …FOR XML MODE

Query processor

ROWSET to XML

Page 23: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Using RAW ModeUsing RAW Mode

각각의 레코드에 하나의 각각의 레코드에 하나의 <row> element<row> element 각 컬럼은 각 컬럼은 attibuteattibute 로 처리로 처리

SELECT OrderID, OrderDateFROM OrdersFOR XML RAW

SELECT OrderID, OrderDateFROM OrdersFOR XML RAW

<row OrderID="10248" OrderDate="07/04/1996"/><row OrderID="10249" OrderDate="07/05/1996"/>

<row OrderID="10248" OrderDate="07/04/1996"/><row OrderID="10249" OrderDate="07/05/1996"/>

Page 24: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Using AUTO ModeUsing AUTO Mode

테이블 이름이 테이블 이름이 elementelement 의 이름의 이름 중첩을 지원중첩을 지원 , , 컬럼은 컬럼은 attributeattribute 로 처리로 처리 AliasAlias 로 이름 변경 가능로 이름 변경 가능

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO

<Orders OrderID="10248" OrderDate="07/04/1996"/><Orders OrderID="10249" OrderDate="07/05/1996"/>

<Orders OrderID="10248" OrderDate="07/04/1996"/><Orders OrderID="10249" OrderDate="07/05/1996"/>

Page 25: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

ELEMENTSELEMENTS

컬럼은 컬럼은 child elementchild element 로 처리로 처리

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, ELEMENTS

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, ELEMENTS

<Orders> <OrderID>10248</OrderID> <OrderDate>07/04/1996</OrderDate></Orders><Orders> <OrderID>10249</OrderID> <OrderDate>07/05/1996</OrderDate></Orders>

<Orders> <OrderID>10248</OrderID> <OrderDate>07/04/1996</OrderDate></Orders><Orders> <OrderID>10249</OrderID> <OrderDate>07/05/1996</OrderDate></Orders>

Page 26: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

예예 ) Table) Table JoinJoinSELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML RAW

SELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML RAW

<row OrderID="10248" ProductID="1" Quantity="12"/><row OrderID="10248" ProductID="42" Quantity="10"/>

<row OrderID="10248" ProductID="1" Quantity="12"/><row OrderID="10248" ProductID="42" Quantity="10"/>

SELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML AUTO

SELECT OrderForm.OrderID, Item.ProductID Item.QuantityFROM Orders OrderForm JOIN [Order Details] ItemON OrderForm.OrderID = Item.OrderIDORDER BY OrderForm.OrderIDFOR XML AUTO

<OrderForm OrderID="10248"> <Item ProductID="1" Quantity="12"/> <Item ProductID="42" Quantity="10"/></OrderForm>

<OrderForm OrderID="10248"> <Item ProductID="1" Quantity="12"/> <Item ProductID="42" Quantity="10"/></OrderForm>

Page 27: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

XMLDATAXMLDATA

XML-Data Reduced (XDR) SchemaXML-Data Reduced (XDR) Schema 로 로 리턴리턴

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, XMLDATA

SELECT OrderID, OrderDateFROM OrdersFOR XML AUTO, XMLDATA

<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-

com:datatypes"><ElementType name="Orders" content="empty“

model="closed"><AttributeType name="OrderID" dt:type="14"/><AttributeType name="OrderDate" dt:type="dateTime"/><attribute type="OrderID"/><attribute type="OrderDate"/></ElementType></Schema>

<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-

com:datatypes"><ElementType name="Orders" content="empty“

model="closed"><AttributeType name="OrderID" dt:type="14"/><AttributeType name="OrderDate" dt:type="dateTime"/><attribute type="OrderID"/><attribute type="OrderDate"/></ElementType></Schema>

Page 28: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Binary DataBinary DataSELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 10FOR XML AUTO

SELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 10FOR XML AUTO

<Employees EmployeeID="1" Photo="dbObject/Employees[@EmpID='1']/@Photo"/>

<Employees EmployeeID="1" Photo="dbObject/Employees[@EmpID='1']/@Photo"/>

SELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 1FOR XML AUTO, BINARY BASE64

SELECT EmployeeID, PhotoFROM EmployeesWHERE EmployeeID = 1FOR XML AUTO, BINARY BASE64

<Employees EmpID="1" Photo="FRwvAAIAAAANAA4AFAAhAP////9Ca ..."/>

<Employees EmpID="1" Photo="FRwvAAIAAAANAA4AFAAhAP////9Ca ..."/>

Page 29: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Using EXPLICIT ModeUsing EXPLICIT Mode

범용테이블을 만들기 위해 범용테이블을 만들기 위해 T-SQL T-SQL 작성작성 원하는 원하는 XMLXML 문서형태로 제어문서형태로 제어

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo],

OrderDate AS [Invoice!1!Date!Element]FROM OrdersWHERE OrderID = 10248FOR XML EXPLICIT

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo],

OrderDate AS [Invoice!1!Date!Element]FROM OrdersWHERE OrderID = 10248FOR XML EXPLICIT

<Invoice InvoiceNo="10248"> <Date>1996-07-04T00:00:00</Date></Invoice>

<Invoice InvoiceNo="10248"> <Date>1996-07-04T00:00:00</Date></Invoice>

Page 30: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

범용 테이블범용 테이블 XML XML 문서의 특정형식문서의 특정형식 (( 행집합행집합 ))

Tag,Parent Tag,Parent 계층구조 결정계층구조 결정 ColumnColumn 이름은 이름은 element / attribute element / attribute 로 매핑로 매핑

TagTag ParentParent Invoice!1!Invoice!1!InvoiceNoInvoiceNo

Invoice!1!Date!Invoice!1!Date!ElementElement

LineItem!2!LineItem!2!ProductIDProductID

LineItem!2LineItem!2

11 NULLNULL 1024810248 1996-07-04T00:00:001996-07-04T00:00:00 NULLNULL NULLNULL

22 11 1024810248 NULLNULL 1111 Queso Queso CabralesCabrales

22 11 1024810248 NULLNULL 4242 Singaporean Singaporean ……

Page 31: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

예예 ) EXPLICIT) EXPLICIT

UNION ALLUNION ALL 이용이용SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element], NULL AS [LineItem!2!ProductID], NULL AS [LineItem!2]FROM OrdersWHERE OrderID=10248UNION ALLSELECT 2 AS Tag,1 AS Parent,

OD.OrderID,NULL,OD.ProductID,P.ProductName

FROM [Order Details] OD JOIN Orders O ON OD.OrderID=O.OrderIDJOIN Products P ON OD.ProductID = P.ProductIDWHERE OD.OrderID=10248ORDER BY [Invoice!1!InvoiceNo], [LineItem!2!ProductID]FOR XML EXPLICIT

SELECT 1 AS Tag, NULL AS Parent, OrderID AS [Invoice!1!InvoiceNo], OrderDate AS [Invoice!1!Date!Element], NULL AS [LineItem!2!ProductID], NULL AS [LineItem!2]FROM OrdersWHERE OrderID=10248UNION ALLSELECT 2 AS Tag,1 AS Parent,

OD.OrderID,NULL,OD.ProductID,P.ProductName

FROM [Order Details] OD JOIN Orders O ON OD.OrderID=O.OrderIDJOIN Products P ON OD.ProductID = P.ProductIDWHERE OD.OrderID=10248ORDER BY [Invoice!1!InvoiceNo], [LineItem!2!ProductID]FOR XML EXPLICIT

Page 32: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

OPENXMLOPENXML

OPENXML syntaxOPENXML syntax RowRow 를 결정하기 위해 를 결정하기 위해 rowpattern rowpattern

parameter parameter 사용사용 컬럼을 결정하기 위해 컬럼을 결정하기 위해 WITH WITH

구문사용구문사용 AttributeAttribute 를 결정하기 위해 를 결정하기 위해 Flags Flags

parameter parameter 사용사용

SELECT * FROM OpenXML (@idoc, 'order', 1)WITH (orderno integer,

orderdate datetime)

SELECT * FROM OpenXML (@idoc, 'order', 1)WITH (orderno integer,

orderdate datetime)

Page 33: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

OPENXML OPENXML 적용방법적용방법 sp_xml_preparedocumentsp_xml_preparedocument 으로 트리생성으로 트리생성 sp_xml_removedocumentsp_xml_removedocument 메모리 해제메모리 해제

CREATE PROC ProcessOrder @doc NTextASDECLARE @idoc integerEXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Process Document

EXEC sp_xml_removedocument @idoc

CREATE PROC ProcessOrder @doc NTextASDECLARE @idoc integerEXEC sp_xml_preparedocument @idoc OUTPUT, @doc

-- Process Document

EXEC sp_xml_removedocument @idoc

Page 34: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

예예 ) ) Inserting DataInserting Data

INSERT INSERT 구문구문

SELECT INTO SELECT INTO 구문구문

INSERT ordersSELECT * FROM OpenXML (@idoc, 'order', 1)WITH (orderno integer,

orderdate datetime)

INSERT ordersSELECT * FROM OpenXML (@idoc, 'order', 1)WITH (orderno integer,

orderdate datetime)

SELECT * INTO newordersFROM OpenXML (@idoc, 'order', 1)WITH (orderno integer,

orderdate datetime)

SELECT * INTO newordersFROM OpenXML (@idoc, 'order', 1)WITH (orderno integer,

orderdate datetime)

Page 35: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Using rowpatternUsing rowpattern

XpathXpath 를 사용를 사용

SELECT * FROM OpenXML (@idoc, 'order/lineitem', 1)WITH (productid integer,

quantity integer,price money)

SELECT * FROM OpenXML (@idoc, 'order/lineitem', 1)WITH (productid integer,

quantity integer,price money)

SELECT * FROM OpenXML (@idoc, 'order/lineitem[@quantity>2]', 1)WITH (productid integer,

quantity integer,price money)

SELECT * FROM OpenXML (@idoc, 'order/lineitem[@quantity>2]', 1)WITH (productid integer,

quantity integer,price money)

Page 36: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Using FlagsUsing Flags

attributes attributes 또는 또는 elements elements 지정하기 위해 사용지정하기 위해 사용 0 = default (attributes)0 = default (attributes) 1 = attributes1 = attributes 2 = elements2 = elements 3 = attributes elements (1 + 2)3 = attributes elements (1 + 2)

Page 37: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Using a Table NameUsing a Table Name

WITH WITH 구문에 테이블 이름 사용구문에 테이블 이름 사용 컬럼이름이 컬럼이름이 matchmatch 데이터 타입이 호환데이터 타입이 호환

INSERT lineitemsSELECT * FROM OpenXML (@idoc, 'order/lineitem', 3)WITH lineitems

INSERT lineitemsSELECT * FROM OpenXML (@idoc, 'order/lineitem', 3)WITH lineitems

Page 38: XML 과 SQL Server 2000 에서 지원하는 XML 처리 방법 정 홍주 WebTime Feelanet

Column PatternColumn Pattern

계층구조에서 데이터를 처리하기 위해 계층구조에서 데이터를 처리하기 위해 Xpath Xpath 사용사용

relative Xrelative XPPath ath 적용적용

INSERT lineitemsSELECT * FROM OpenXML (@idoc, 'order/lineitem', 1)WITH (orderno integer '../@orderno',

productid integer, --Default Mappingquantity integer './quantity',price money --Default Mapping)

INSERT lineitemsSELECT * FROM OpenXML (@idoc, 'order/lineitem', 1)WITH (orderno integer '../@orderno',

productid integer, --Default Mappingquantity integer './quantity',price money --Default Mapping)