SQL Server 2005 XML Features 중앙대학교 데이타베이스 연구실 이봐라 중앙대학교 Database 연구실
Contents SQL Sever 2005 Express Edition 소개 설치 방법 참고 문서 SQL Server 2005 XML 지원 개요 SQL Server 2005 XQuery/XPath 미지원 기능 SQL Server 2005 XML 저장소 SQL Server 2005 서버측 XML 프로세싱 XML 데이터 쿼리 및 수정 FOR XML OPENXNK SQLXML 중앙대학교 Database 연구실
SQL Server 2005 Express Edition MS 사의 무료 DMBS 지원 사양 Single CPU 1GB Memory 4GB 데이터베이스 크기 지원 기능 XQuery/XPath Native XML SQL/XML SQL Native Data Type 중앙대학교 Database 연구실
SQL Server 2005 Express Edition SQL Server 2005 Edition 별 성능비교 URL Link SQL Server 2005 Express Edition 에 대한 소개 중앙대학교 Database 연구실
SQL Server 2005 Express Edition - 설치 방법 - SQL Server 2005 Installer Download Link Window Installer 3.0 Windows 자체의 정품인증이 필요 .NET Framework 2.0 중앙대학교 Database 연구실
SQL Server 2005 Express Edition - 설치 방법 - SQL Server Management Studio Express Express Edition 은 GUI 형식의 관리 툴 미포함 Express Edition 을 위한 무료 관리 툴 Download Link 설명 및 자습서 SQL Server 2005 를 위한 설명서 Northwind Sample Database MS 사의 Northwind 예제 Database 중앙대학교 Database 연구실
SQL Server 2005 Express Edition - 설치 방법 - Window Installer 설치 .NET Framework 2.0 설치 SQL Server 2005 Express Edition 설치 SQL Server Management Studio Express 설치 설명서 및 샘플 Database 설치 중앙대학교 Database 연구실
참고 문서 SQL Server 2005 의 XML 지원 SQL Server 2005의 XML 데이터 형식을 위한 성능 최적화 SQLXML 과 XML 지원이 통합되는 방법 설명 URL Link SQL Server 2005의 XML 데이터 형식을 위한 성능 최적화 XML 데이터 형식의 쿼리 데이터 수정 성능을 향상 시키는 방법 설명 중앙대학교 Database 연구실
참고 문서 SQL Server 2005의 XQuery 소개 FLOWR 문 설명 SQL Server 2005 에서 미 지원하는 XQuery 기능 URL Link Microsoft SQL Server 2005에서 FOR XML 새로운 기능 FOR XML 절의 주요 새 기능 설명 관계형 데이터와 XML 간 집계 작성 중앙대학교 Database 연구실
SQL Server 2005 - 시작 화면 - 질의 작성 Workspace 결과 출력 DB Tables 실행키 중앙대학교 Database 연구실
Northwind Example Database 설치 & 사용법 SQL Server 2005 Express Edition 에 미포함 MS 사에서 SQL Server 의 학습을 위해 만들어 놓은 예제 Database Table 본 튜토리얼에서 사용되는 Database 이기 떄문에 설치 필요 C:\SQL Server 2000 Sample Database 에 설치됨 MS Download 사이트에서 다운로드 받아야함 Download Link 중앙대학교 Database 연구실
Northwind Example Database 설치 & 사용법 설치 스크립트 실행하여 DB 설치 파일 -> 열기 -> instnwnd.sql -> ! 버튼 (쿼리실행) 중앙대학교 Database 연구실
Northwind Example Database 설치 & 사용법 설치 후 Management Studio Express 재 접속 미 재 접속 시 Northwind 적용 되지 않음 Use Northwind 사용하여 사용 DB 지정 중앙대학교 Database 연구실
SQL Server 2005 XML 지원 개요 XML 데이터 형식 Untyped XML (형식없는 XML) Schema Collection 과 연결 필요 중앙대학교 Database 연구실
SQL Server 2005 XML 지원 개요 XML 데이터 형식 쿼리 및 데이터 수정 Transact-SQL Select 문 사용하여 XML 검색 XML 데이터 형식 메서드는 XQuery 인식 XPath 2.0 과 XQuery 지원 중앙대학교 Database 연구실
SQL Server 2005 XML 지원 개요 XML 인덱싱 XML 열을 인덱싱하는 메커니즘 제공 XML 인스턴스 모든 태그, 값, 경로에 B+ Tree 인덱스 생성한다. 흔히 발생하는 쿼리의 속도를 높이기 위하여 보조 XML 인덱스를 생성한다. 중앙대학교 Database 연구실
SQL Server 2005 XML 지원 개요 XML 스키마 프로세싱 DBMS 엔진은 데이터 할당 및 수정 중에 XML 스키마에 따라 인스턴스를 확인합니다. XML 스키마 컬랙션에 따라 XML 열, 변수 및 매개 변수를 선택적으로 입력할 수 있습니다. Typed XML 데이터를 효율적으로 처리하는데 도움을 줍니다. 중앙대학교 Database 연구실
SQL Server 2005 XML 지원 개요 FOR XML 및 OpenXML 보안기능 SQL Server 2005 에서 XML 형 데이터를 엑세스 하거나 테이블형 데이터를 XML 데이터로 변환 시키는데 사용됨 중앙대학교 Database 연구실
미 지원 XQuery/XPath 기능 SQL Server 2005 에서는 Xquery 의 몇가지 기능을 지원하지 않음 Let Clause Solution : Let 절 대신 인라인 식 사용 범위 식 (to 연산자) 6 to 10 같은 범위식 지원하지 않음 Solution : to 연산자 대신 모든 항목 나열 형식 정보 Typeswitch : 다른 언어의 Switch-case 문과 유사 Solution : if then else 나 instance of 사용 중앙대학교 Database 연구실
미 지원 XQuery/XPath 기능 재사용성 기본 제공 함수 Treat as: 결과 정적형식을 특정 정적형식으로 변환 Solution : 없음 Castable: 원자 값을 특정 형식으로 캐스팅 여부 확인 Solution : $x castable as T 대신 Empty(data($x)) 식 사용 Validate: 스키마 정의에 인수에 대한 유효성 검사 Solution : Validate 대신 지정된 T-SQL 캐스팅 사용 재사용성 복잡한 재사용 가능한 함수 등을 재사용 할수 없음 Solution – 없음 기본 제공 함수 접근자 : fn:node-name(), fn:nilled(), fn:base-uri(), fn:document-uri() 중앙대학교 Database 연구실
미 지원 XQuery/XPath 기능 오류 함수 : fn:error() 추적 함수 : fn:trace() 숫자 값에 대한 함수 : abs(), round-half-to-even() 문자열 처리 함수 : codepoints-to-string(), string-to-codepoints(), compare(), string-join(), normalize-space(), normalize-unicode(), upper-case(), lower-case(), translate(), escape-uri(), starts-with(), ends-with(), substring-before(), substring-after(), matches(), replace(), tokenize() 기간, 날짜 및 시간에 대한 함수 및 연산자: years-from-duration(), months-from-duration(), days-from-duration(), hours-from-duration(), minutes-from-duration(), seconds-from-duration(), year-from-dateTime(), month-from-dateTime(), month-from-dateTime(), day-from-dateTime(), hours-from-dateTime(), minutes-from-dateTime(), seconds-from-dateTime(), timezone-from-dateTime(), year-from-date(), month-from-date(), day-from-date(), timezone-from-date(), hours-from-time(), minutes-from-time(), seconds-from-time(), timezone-from-time(), adjust-dateTime-to-timezone(), adjust-date-to-timezone(), adjust-time-to-timezone(), subtract-dateTimes-yielding-yearMonthDuration(), subtract-dateTimes-yielding-dayTimeDuration(), subtract-dates-yielding-yearMonthDuration(), subtract-dates-yielding-dayTimeDuration(). xdt:dayTimeDuration, xdt:yearMonthDuration 중앙대학교 Database 연구실
미 지원 XQuery/XPath 기능 순서 한정자 Qnames와 관련된 함수 : resolve-QName(), QName(), namespace-uri-for-prefix(), in-scope-prefixes(). 시퀀스에 대한 함수 및 연산자 : fn:boolean(), fn:index-of(), fn:exists(), insert-before(), remove(), reverse(), subsequence(), unordered(), zero-or-one(), one-or-more(), exactly-one(), deep-equal(), 두 개의 인수를 가지는 id(), idref(), doc(), collection() 함수 및 union, intersect 및 except 연산자. 해결 방법 – fn:boolean() 대신 not(not())을, fn:exists() 대신 not(empty())을, zero-or-one() 또는 exactly-one() 대신 명시적 for iteration 또는 [1]을 사용합니다. 컨텍스트 함수 : current-dateTime(), current-date(), current-time(), default-collation(), implicit-timezone(). 순서 한정자 Order-by 절을 사용하여 지정된 empty greatest | least 는 지원되지 않음 중앙대학교 Database 연구실
미 지원 XQuery/XPath 기능 기타 기능 idiv 연산자. 명시적 스키마 가져오기는 지원되지 않습니다. 외부 변수는 지원되지 않습니다. 경계 공백 유지 옵션은 지원되지 않습니다. 노드 및 값과 같은 유형이 다른 시퀀스를 연결하는 기능은 지원되지 않습니다. 표준 시간대 유지는 지원되지 않습니다. 단순 형식 콘텐츠를 가진 요소의 텍스트 노드에 액세스하는 기능은 지원되지 않습니다. 형식 있는 XML 데이터 형식 인스턴스의 xsi:* 특성에 액세스하는 기능은 지원되지 않습니다. 중앙대학교 Database 연구실
XML 저장소 SQLXML 기술인 XML View 와 Native XML 데이터 저장소로 나누어짐 XML 데이터 형식의 Native 저장소 XML 내용이 보존되는 내부 표현으로 데이터 저장 공백, 특정 순서, 네임스페이스 접두사 및 XML 선언 같은 정보는 유지되지 않음 자세한 정보 : URL Link XML Schema 와 DB 의 테이블 간 매핑을 통하여 영구적 데이터에 대한 XML View 생성 Xpath 1.0 을 사용하여 XML View 에 쿼리하면 이 쿼리는 테이블에 대한 SQL 로 변환됨 중앙대학교 Database 연구실
XML 저장소 Native XML 저장소 문서 순서 및 문서 구조를 유지하면서 서버에서 XML 데이터를 직관적으로 저장할 수 있는 방법이 필요 XML 데이터에 대한 스키마가 미 존재 가능 XML 데이터를 쿼리하고 수정해야 합니다. 신속한 쿼리 처리를 위해 XML 데이터를 인덱싱 응용 프로그램에 XML 데이터 및 XML Schema 관리를 위한 시스템 카탈로그 뷰가 필요합니다. 중앙대학교 Database 연구실
XML 저장소 XML View 기술 기존 관계형 데이터에 대해 XML 뷰를 사용하는 XML 중심 프로그래밍 모델이 필요 외부 파트너가 제공한 XML 데이터에 대한 스키마(XSD, XDR)가 존재 데이터 순서가 중요하지 않고, 쿼리 가능한 데이터가 재귀적이지 않거나, 최대 재귀 수준이 미리 알려져 있을 경우 XPath 1.0을 사용한 XML 뷰를 통해 데이터를 쿼리하고 수정해야 하는 경우. XML 데이터를 대량 로드하고 이를 XML 뷰를 사용하여 기본 테이블로 분해해야 하는 경우. 중앙대학교 Database 연구실
SQL Server 2005 서버측 XML 프로세싱 XML 데이터 형식 일반적인 CREATE TABLE 문을 사용하여 XML 열이 있는 테이블 생성 가능 정수 기본키 “pk” 와 Untyped XML 열 “xCol” 을 가지는 “docs” 테이블을 생성 CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null) 중앙대학교 Database 연구실
XML 데이터 형식 Untyped XML ISO SQL-2003 표준 XML 데이터 형식 지원 XML 1.0 문서, 텍스트 노드, XML 콘텐트 프래그먼트 저장 가능 Well-Formed 되지 않는 데이터는 거부하지만 꼭 XML 데이터 형식이 XML Schema 와 연결될 필요는 없다. (Untyped 인 이유) Untyped XML 데이터 타입사용하는 테이블 생성 CREATE TABLE UntypedDoc (pk INT PRIMARY KEY, xCol XML not null) 중앙대학교 Database 연구실
XML 데이터 형식 Typed XML XML Schema를 XML 열이 연결시키는 방법 CREATE TABLE TypedXMLDoc ( id INT IDENTITY PRIMARY KEY, Document XML(CONTENT myCollection)) 중앙대학교 Database 연구실
XML 데이터 형식 열 제한 두가지 XML 데이터 형식에서 RDB 처럼 대부분의 제한 규칙을 사용 할 수 있음 Except for 고유키, 기본키, 외래키 XML 데이터 형식 인스턴스는 비교가 불가능 제한을 사용하는 방법 XML 열에 null 사용 가능 & 불가능 지정 기본값 지정하고 열에 대한 CHECK 제한 조건 지정 중앙대학교 Database 연구실
XML 데이터 형식 열 제한 XML 열 제한하기 예제 위의 Function 생성하여 아래 Table 생성시 제약규칙에 넣을 수 있다. CREATE Function udf_Check_Names (@xmlData XML) RETURNS int AS BEGIN RETURN (SELECT @xmlData.exist(‘/book/author[fname = lname]’)) END GO CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null CONSTRAINT CK-name CHECK(udf_Check_Names(xCol)=0)) GO 중앙대학교 Database 연구실
XML 데이터 형식 Untyped XML 열에 데이터 삽입 데이터 직접 삽입 <book> 데이터는 삽입도중에 XML 데이터 타입으로 암시적으로 변환되며 형식 검사함 INSERT INTO docs VALUES (1, '<book genre="security" publicationdate="2002" ISBN="0-7356-1588-2"> <title>Writing Secure Code</title> <author> <first-name>Michael</first-name> <last-name>Howard</last-name> </author> <price>39.99</price> </book>') INSERT INTO docs VALUES (2, '<doc id="123"> <sections> <section num="1"><title>XML Schema</title></section> <section num="3"><title>Benefits</title></section> </sections> </doc>') 중앙대학교 Database 연구실
XML 데이터 형식 Untyped XML 열에 데이터 삽입 파일에서 Untyed XML 열에 데이터 삽입 지정된 파일을 OPENROWSET 명령어를 사용하여 BLOB 로 읽어 저장한다 INSERT INTO docs SELECT 10, xCol FROM (SELECT * FROM OPENROWSET (BULK 'C:\temp\xmlfile.xml', SINGLE_BLOB) AS xCol) AS R(xCol) 중앙대학교 Database 연구실
XML 데이터 형식 Typed XML 열에 데이터 삽입 형식을 지정하는데 사용된 XML 스키마의 타겟 namespce를 지정 해야한다 Namespace는 비어 있을 수 있음 INSERT XmlCatalog VALUES(2, '<?xml version="1.0"?> <dvdstore xmlns="http://myDVD"> <dvd genre="Comedy" releasedate="2003"> <title>My Big Fat Greek Wedding</title> <price>19.99</price> </dvd> </dvdstore>') 중앙대학교 Database 연구실
XML 데이터 형식 Typed XML 열에 데이터 삽입 FOR XML 사용 질의 결과를 XML 데이터 형식 인스턴스로 생성 FOR XML TYPE 을 사용하여 질의 결과를 XML 데이터 형식 변수 @xVar 에 할당 Declare @xVar XML SET @xVar = ( SELECT * FROM docs FOR XML AUTO, TYPE ) 중앙대학교 Database 연구실
XML 데이터 쿼리 및 수정 입력된 XML 데이터는 바이너리 형태로 저장됨 쿼리 하기 위하여 저장된 바이너리 형태 데이터를 분석해야 함 바이너리 XML 분석이 텍스트 형태보다 빠름 중앙대학교 Database 연구실
XML 데이터 형식의 메서드 XML 을 Manipulation 하는 5가지 메서드 Query() Method Untyped XML 형태의 하위 트리가 반환됨 Value() Method XML 인스턴스의 스칼라 값을 추출함 XQuery 표현식이 평가할 노드의 값을 알려줌 Exist() Method XML 인스턴스에서 존재 검사 하는데 사용 Xquery가 null node 에 평가하면 0 아니면 1 중앙대학교 Database 연구실
XML 데이터 형식의 메서드 Nodes() Method Modify() Method 특수 XML 데이터 형식의 인스턴스 생성 Count(*) 집계나 NULL 검사에서 사용됨 Modify() Method XML 인스턴스의 각 부분을 수정 하위 트리 추가 및 삭제 Value 변경, 삭제, 추가 스칼라 값 대치 중앙대학교 Database 연구실
XML 데이터 형식의 메서드 Query() Method 사용 Data Table SELECT pk, xCol.query('/doc[@id = 123]//section') FROM temp 중앙대학교 Database 연구실
XML 데이터 형식의 메서드 Exist() Method 사용 /doc[@id = 123] 존재 여부를 묻고 없으면 결과에 포함시키지 않음 Data Table SELECT pk, xCol.query('/doc[@id = 123]//section') FROM temp WHERE xCol.exist('/doc[@id = 123]') = 1 중앙대학교 Database 연구실
XML 데이터 형식의 메서드 Value() Method 사용 Data Table SELECT xCol.value( 'data((/doc//section[@num = 3]/title)[1])', 'nvarchar(max)') FROM temp 중앙대학교 Database 연구실
XML 데이터 형식 메스드에서 GROUP BY 사용하기 SELECT Fname, count(Fname) FROM (SELECT nref.value('(author/first-name)[1]', 'nvarchar(max)') Fname FROM temp CROSS APPLY xCol.nodes('/book') T(nref) WHERE nref.exist ('author/first-name') = 1) Result GROUP BY FName ORDER BY FName 중앙대학교 Database 연구실
SQL Server 2005 의 XQuery 지원 2004년 7월 버전 XQuery 지원 FLWOR 절 지원 XPath 2.0 지원 쿼리중 데이터를 재구성 요소 구성 제공 SELECT pk, xCol.query(' for $s in /doc[@id = 123]//section where $s/@num >= 3 return <topic>{data($s/title)}</topic>') FROM docs 중앙대학교 Database 연구실
SQL Server 2005 의 XQuery 지원 쿼리 컴파일 및 실행 각각의 구문은 자신의 구문분석기로 분석 SQL 명령 : SQL 구문 분석기 XQuery : XQuery 컴파일러 쿼리 실행은 관계형 프레임워크 부분처럼 튜플 중심적 SELECT pk, xCol.query(' for $s in /doc[@id = 123]//section where $s/@num >= 3 return <topic>{data($s/title)}</topic>') FROM docs 중앙대학교 Database 연구실
SQL Server 2005 의 XQuery 지원 XML 데이터 수정 하위 트리를 임이의 노드나 위치에 추가 가능 속성, 요소 및 텍스트 노드 삽입 지원 하위 트리 삭제 지원 UPDATE docs SET xCol.modify(' insert <section num="2"> <title>Background</title> </section> after (/doc/section[@num=1])[1]') 중앙대학교 Database 연구실
SQL Server 2005 의 XQuery 지원 교차 영역 쿼리 XML 과 관계형 결합 데이터 프로세싱 FOR XML 을 사용 : 관계형 데이터 -> XML T-SQL : XML 데이터 -> 관계형 위 방법보다 효율적인 방법은 Xquery 또는 XML 데이터 수정 표현식 내에서 SQL 변수나 열의 값 사용 sql:variable() : XQuery 에 SQL 변수 값 적용 Sql:column() : 관계형 열에서 나온값 XQuery 에 적용 중앙대학교 Database 연구실
SQL Server 2005 의 XQuery 지원 교차 영역 쿼리 Sql:column() 이 장점이 더 많음 예제 sql:variable() 사용한 교차 영역 쿼리 DECLARE @isbn varchar(20) SET @isbn = '0-7356-1588-2' SELECT xCol FROM temp WHERE xCol.exist('/book[@ISBN = sql:variable("@isbn")]') = 1 중앙대학교 Database 연구실
SQL Server 2005 의 XQuery 지원 XML 데이터에서 행 집합 생성 DECLARE @xVar XML SET @xVar = '<book genre="security" publicationdate="2002" ISBN="0-7356-1588-2"> <title>Writing Secure Code</title> <author> <first-name>Michael</first-name> <last-name>Howard</last-name> </author> <first-name>David</first-name> <last-name>LeBlanc</last-name> <price>39.99</price> </book>' SELECT nref.value('first-name[1]', 'nvarchar(50)') FirstName, nref.value('last-name[1]', 'nvarchar(50)') LastName FROM @xVar.nodes('//author') AS R(nref) WHERE nref.exist('.[first-name != "David"]') = 1 중앙대학교 Database 연구실
XML 데이터 인덱싱 SQL Server 2005 XML Index 지원 XML 데이터는 내부 바이너리 형태로 저장 스토리지에 최대 2GB 까지 넣을수 있음 각 쿼리는 테이블 각 행에서 XML blob를 런타임에 1회 이상 분석 쿼리가 빈번할 경우 XML열을 인덱싱 데이터 수정중 발생하는 XML 인덱스 유지 관리 비용 큼 중앙대학교 Database 연구실
XML 데이터 인덱싱 XML Index 생성 Typed XML 이나 Untyped XML 열에 새로운 DDL 명령문 사용하면 생성됨 해당 열의 모든 XML 인스턴스에 대해 B+Tree 가 생성됨 XML 첫번째 Index는 “기본 XML Index” – 일반 적인 종류의 쿼리 속도를 높이기 위하여 생성 최대 1288 레벨의 XML 계층 구조 사용 가능 노드 값의 처음 128 바이트 까지 인덱싱 중앙대학교 Database 연구실
XML 데이터 인덱싱 기본 XML Index 보조 XML Index 일반 적인 종류의 쿼리 속도 높이기 위하여 예제. idx_xCol 이라는 Index 생성 보조 XML Index 기본 XML Index가 생성된 다음 생성 가능 다양한 종루의 쿼리 속도를 높이기 위하여 3가지 종류의 보조 XML Index 생성 가능 CREATE PRIMARY XML INDEX idx_xCol on docs (xCol) 중앙대학교 Database 연구실
XML 데이터 인덱싱 세가지 종류의 보조 XML Index PATH Index : 기본 Index의 열(path, value)에 B+-tree 생성 PATH Index의 주필드를 알고 있으면 경로 표현식 속도 빨라짐 일반적인 사용 : SELECT 문의 WHERE 구에서 XML 열에 대하여 exist() 메서드를 사용하는 경우 SELECT xCol FROM temp WHERE xCol.exist ('/book[@genre = "security"]') = 1 Primary Index CREATE XML INDEX idx_xCol_Path on docs (xCol) USING XML INDEX idx_xCol FOR PATH Secondary Index 중앙대학교 Database 연구실
XML 데이터 인덱싱 Property Index : 기본 Index의 열(PK, path, value) 에 대하여 B+-tree 생성 XML 인스턴스 내에서 속성 룩업을 하는데 도움을 줌 예 ) 책의 genre , title 및 ISBN 속성 검색하는 쿼리 SELECT xCol.value ('(/book/@genre)[1]', 'varchar(50)'), xCol.value ('(/book/title)[1]', 'varchar(50)'), xCol.value ('(/book/@ISBN)[1]', 'varchar(50)') FROM temp CREATE XML INDEX idx_xCol_Property on docs (xCol) USING XML INDEX idx_xCol FOR PROPERTY 중앙대학교 Database 연구실
XML 데이터 인덱싱 Value Index : 기본 XML 인덱스의 열(value, path) 에 B+tree 생성 노드의 값은 알고 있지만 경로가 쿼리에 정확하게 지정되지 않을 경우 도움 //author/last-name [. ="Howard"] /book [@* = "novel"] Typed XML의 값 기반 범위 스캔에 도움이됨 예) // 가 있는 쿼리 SELECT xCol FROM docs WHERE xCol.exist ('//book/@ISBN[. = "0-7356-1588-2"]') = 1 CREATE XML INDEX idx_xCol_Value on docs (xCol) USING XML INDEX idx_xCol FOR VALUE 중앙대학교 Database 연구실
XML 데이터 인덱싱 Content Indexing XML 열에 텍스트 전용 Index 생성 가능 요소 태그는 토큰 경계선으로 사용됨 XML 열에 대해 XML 인덱스와 텍스트 전용 인덱스 모두 생성가능 2가지의 내용 인덱싱 존재 CONTAINS() : 토큰 매칭 방식 XQuery contains() : 하위 문자열 매칭 방식 중앙대학교 Database 연구실
XML 데이터 인덱싱 예) XML 열에 텍스트 전용 인덱스 생성 예) 텍스트 검색과 XML 쿼리의 결합 PK__docs__ 는 테이블의 단일열 기본 키 인덱스 예) 텍스트 검색과 XML 쿼리의 결합 책 제목이 Secure 들어있는 XML 값 검사 CREATE FULLTEXT CATALOG ft AS DEFAULT CREATE FULLTEXT INDEX ON dbo.docs (xCol) KEY INDEX PK__docs__7F60ED59 SELECT * FROM docs WHERE CONTAINS(xCol,'Secure') AND xCol.exist('/book/title/text()[contains(.,"Secure")]') =1 중앙대학교 Database 연구실
XML 데이터 인덱싱 XML Index 를 사용한 쿼리 실행 XML Index 에 대한 카달로그 뷰 XML Indexing 하면 쿼리 실행 속도 증가 XML 열에 기본 XML Index 존재 시 쿼리는 항상 인덱스 기준으로 컴파일 쿼리 계획 생성 이 쿼리 계획은 비용 기준 옵티바이저 사용하여 최적화 한다 XML Index 에 대한 카달로그 뷰 카탈로그 뷰는 XML Index 메타데이터 정보를 알려준다 중앙대학교 Database 연구실
XML 데이터 인덱싱 카탈로그 뷰는 sys.indexes 에 저장 카탈로그 뷰는 sys.xml_indexes 에도 저장 Index “type”이 3인 XML Index 해당 항목이 저장 Index “name”에는 XML Index 의 이름 저장 카탈로그 뷰는 sys.xml_indexes 에도 저장 기본 XML Index 와 보조 XML index 식별자 정보 보조 XML index 시 그에 따른 Path 나 Value 정보 Sys.dm_db_index_physical_stats() 모든 인덱스들의 사이즈 관련 정보 알려줌 SELECT sum (page_count) FROM sys.dm_db_index_physical_stats (db_id(), object_id('temp'), DEFAULT, DEFAULT, 'DETAILED') SDPS JOIN sys.xml_indexes SXI ON (SXI.index_id = SDPS.index_id) WHERE SXI.name = 'idx_xCol_Path' 중앙대학교 Database 연구실
XML Schema Processing 선택적으로 생성 스키마에 연결되지 않은 데이터 형 Untyped XML Schema 컬랙션에 등록된 XML 스키마를 XML 데이터 형식과 연결 DDL 명령문을 사용하여 Schema 컬랙션 생성 타겟 네임스페이스를 사용하여 각 XML Schema 를 구분함 중앙대학교 Database 연구실
XML Schema Processing XML 인스턴스의 각 최상위 요소는 자신에게 적응되는 빈 타겟 네임스페이스 지정 네임스페이스에 따라 검증이 가능 Typed XML 이 Untyped XML 비해 효율적 예) Typed XML 에 Schema 적용 예 XML Schmea 에 xs:decimal 이면 /book/price 는 10 진수로 저장된다 쿼리 컴파일중 XML Schema는 형식을 검사하는데 형식이 불일치 할 경우 오류 발생 중앙대학교 Database 연구실
XML Schema Processing 쿼리 컴파일러는 쿼리 최적화 위하여 XML Schema 사용 SQL Server 2005 는 W3C XML Schema 1.0 규격을 지원함 XML Schema 문서의 주석과 주해는 미 보존 Key/keyref 지원하지 않음 중앙대학교 Database 연구실
XML Schema Processing Schema Collection XML Schema 컬렉션 은 메타데이타 엔티티 XML Schema 컬렉션 내의 각 XML Schema 는 타겟 네임스페이스로 구분됨 XML Schema 컬랙션은 보한이 설정됨 예) 스키마 컬렉션 생성 CREATE XML SCHEMA COLLECTION myCollection AS '<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://myBooks" elementFormDefault="qualified" targetNamespace="http://myBooks"> 타겟 네임스페이스 중앙대학교 Database 연구실
XML Schema Processing 예) temp table 에 대한 Schema Collection 중앙대학교 Database 연구실
XML Schema Processing XML Schmea 컬랙션 수정 ALTER XML SCHEMA COLLECTION 을 사용하여 컬랙션의 XML Schema 를 확장하거나 새로운 XML Schema 를 등록할 수 있다. 예) http://myDVD XML Schema 추가하기 ALTER XML SCHEMA COLLECTION myCollection ADD ‘ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://myDVD" elementFormDefault="qualified" targetNamespace="http://myDVD"> 중앙대학교 Database 연구실
XML Schema Processing Schema Collection 의 Access Control Schema 컬렉션 역시 보안 모델을 사용하는 다른 SQL 객체와 똑같이 보호 가능 ALTER, CONTROL, TAKE OWNERSHIP, REFERENCES, EXECUTE 및 VIEW DEFINTION 등의 권한이 있음 테이블이나 XML 열에 대한 권한이 있어도 XML 스키마 컬렉션에 대한 독립된 권한이 필요함 중앙대학교 Database 연구실
SQLXML in SQL Server 2005 SQL/XML 의 기능은 포함하였지만 표준 스팩 과는 다르게 구현 하였다. SQL Server 의 Web Service 를 위한 기능들 RDB 데이터에 대한 XML View 를 생성하여 XML 파일처럼 XQuery등의 질의를 날릴수 있다 Query a RDB with XPath Query a RDB with T-SQL and returns XML Update relational data as if it was XML Convert XML data into relational data and load it into SQL Server 2000 database 중앙대학교 Database 연구실
SQLXML in SQL Server 2005 SQLXML 매핑 기술을 사용하여 관계형 데이터의 논리적 XML Views 생성 XML View 와 XPath 결합시 요청된 데이터를 찾아 스키마에 지정된 대로 형태를 만드는 FOR XML 쿼리 생성 SQLXML Updategrams 는 XML 인스턴스의 변경내용 표현 SQLXML Bulkload : XML View 사용 XML 데이터를 관계형 테이블에 넣는다 중앙대학교 Database 연구실
SQLXML in SQL Server 2005 SQL Server 2005 는 SQLXML 4.0 지원 지원되는 기능들 2000 경우는 따로 설치 필요 지원되는 기능들 Annotated XSD Schemas XML Bulk load Web Service (SOAP) 지원 Updategrams 2005 에서 추가로 XML Data Type 추가 중앙대학교 Database 연구실
SQLXML in SQL Server 2005 SQL Server Express Edition 은 SQLXML 기능 미포함 SQL Server 정식 버전의 Notification Service 와 함께 SQLXML 4.0 버전 설치 핵심 정보를 시기 적절하게 전달하기 위한 비즈니스 솔루션에 사용되는 서비스 SQL Server 2000 을 사용하거나 SQL Server 2005 Server Standard 이상의 버전을 사용하여야 SQL Server 의 SQLXML 기능 사용가능 중앙대학교 Database 연구실
FOR XML & OPENXML FOR XML OPENXML RDB 에 저장된 테이블을 XML 형식으로 생성하고 쿼리를 날릴 수 있음 OPENXML XML 문서를 관계형 표 형식 행집합 으로 표현하기 위하여 OPENXML 함수 지원 중앙대학교 Database 연구실
FOR XML SELECT 문에서 반환한 관계형 집합을 XML 로 집계하는 기능 SQL 문의 Select 절과 함께 사용된다 3가지의 모드 지원 RAW – 반환된 각 행에 대해 row 라는 요소 생성 AUTO – SELECT 문의 데이터 순서에 근거하여 요소 정보, 계층 구조를 추론하는 방법 사용 EXPLICIT – 단일 SQL 쿼리에 공식화 되는 동안 거의 모든 XML 형태에 매핑될 수 있는 특정 행 집합 형식 필요 중앙대학교 Database 연구실
FOR XML XMLDATA ELEMENTS BINARY BASE64 SELECT 조회할 리스트 FROM 테이블 데이터 WHERE 검색 조건 FOR XML xmlmode [, XMLDATA][,ELEMENTS][, BINARY64] XMLDATA 반환된 XML rowset을 통해서 스키마를 만든다. 스키마는 반환되는 XML rowset에 따라 바뀐다. ELEMENTS 반환된 XML rowset을 sub_element로 만든다. BINARY BASE64 XML rowset에서 binary data를 base64 형태로 인코딩해서 표현한다. 중앙대학교 Database 연구실
FOR XML Client SQL Server Annotated SQL SQL Result Set XML Execute The FOR XML Clause Client SQL Server Annotated SQL SQL Result Set XML Select CategoryName FROM Categories FOR XML RAW <row CategoryName="Beverages"/> <row CategoryName="Condiments"/> Execute XML Support Module Tagging CategoryName ------------------ Beverages Condiments FOR XML xmlmode [, XMLDATA][,ELEMENTS][, BINARY64] 중앙대학교 Database 연구실
FOR XML 예) SQL 문에 FORXML 적용 Temp 요소를 XML 형식 인스턴스로 반환 NorthWind DB 의 Customer Table 사용 SELECT * FROM Customers FOR XML AUTO, TYPE 중앙대학교 Database 연구실
FOR XML 예) XQuery 사용하여 Customer 연락처 이름을 새 person 요소에 가져옴 SELECT (SELECT * FROM Customers FOR XML AUTO, TYPE).query( '<doc>{ for $c in /Customers return <Person name="{data($c/@ContactName)}"/> }</doc>') 중앙대학교 Database 연구실
FOR XML RAW Mode FOR XML RAW mode 수행한 결과를 각각의 XML 요소로 구성된 ResultSet 으로 리턴 각 요소는 각각의 컬럼을 Attr 와 매칭된다. 컬럼 값이 비어있으면 Attr 와 매치되지 않는다. ResultSet 의 각 row 는 row 라는 element 변환된다 중앙대학교 Database 연구실
FOR XML RAW Mode XML로 특정 항목에 대한 주문리스트 뽑기 SELECT OrderID, ProductID, UnitPrice, Quantity FROM [Order Details] WHERE OrderID = 10248 FOR XML RAW 원시 테이블 결과 중앙대학교 Database 연구실
FOR XML RAW Mode RAW Mode 쿼리에서 Join 사용 RAW 방식 join 은 학상 속성 중심 XML 리턴 SELECT Orders.OrderID, OrderDate, ProductID, Quantity FROM Orders JOIN [Order Details] ON Orders.OrderID = [Order Details].OrderID WHERE Orders.OrderID = 10248 FOR XML RAW 결과 중앙대학교 Database 연구실
FOR XML RAW Mode 속성 이름 지정을 위한 Alias 사용 계산되어 리턴되는 컬럼 이름 변경 명령 Alias SELECT OrderID InvoiceNo, SUM(Quantity) TotalItems FROM [Order Details] WHERE OrderID = 10248 GROUP BY OrderID FOR XML RAW 결과 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode BINARY BASE64 옵션 사용한 바이너리 필드 처리 이미지와 같은 바이너리 데이터 전송시 유용 use Northwind SELECT picture FROM categories WHERE categoryid = 1 FOR XML RAW, BINARY BASE64 결과 중앙대학교 Database 연구실
FOR XML AUTO Mode FOR XML AUTO Mode RAW 모드보다 리턴되는 XML 결과를 좀더 컨트롤 가능. FROM 절 안의 테이블이 ResultSet 과 매치될 엘리먼트의 이름이 된다 Binary 데이터에 대한 URL-encoding 지원 Aggregation(SUM, COUNT) 등 지원하지 않음 GROUP-BY 지원하지 않음 Aggregation 이나 GROUP-BY 위해서는 RAW 모드 사용하여야함 중앙대학교 Database 연구실
FOR XML AUTO Mode Auto Mode는 FROM 절 안의 테이블이 ResultSet과 매치될 엘리먼트의 이름이 된다 Raw Mode 와는 다른 시작 엘리먼트 가짐 SELECT OrderID, CustomerID FROM Orders WHERE OrderID = 10248 FOR XML AUTO 결과 중앙대학교 Database 연구실
FOR XML AUTO Mode 테이블명에 공백이 있으면 공백은 인코딩된 문자로 표현된다 SELECT OrderID, ProductID, Quantity FROM [Order Details] WHERE OrderID = 10248 FOR XML AUTO 결과 중앙대학교 Database 연구실
FOR XML AUTO Mode Auto Mode 에서 Alias 사용 SQL 의 FROM 절에도 Alias 사용 가능 SELECT OrderID InvoiceNo, ProductID, Quantity FROM [Order Details] Item WHERE OrderID = 10248 FOR XML AUTO 결과 중앙대학교 Database 연구실
FOR XML AUTO Mode Auto Mode 에서 Join 사용 RAW 모드보다 지능적인 결과 얻게 됨 각 Join 된 테이블 결과는 중첩된 XML 표현 SELECT Invoice.OrderID InvoiceNo, OrderDate, ProductID, Quantity FROM Orders Invoice JOIN [Order Details] Item ON Invoice.OrderID = Item.OrderID WHERE Invoice.OrderID = 10248 FOR XML Auto 결과 중앙대학교 Database 연구실
FOR XML AUTO Mode ELEMENTS 옵션 사용 RAW 모드는 속성 중심이지만 ELEMENTS 옵션 사용하여 요소 중심 적으로 리턴 가능. 예) 송장 데이터 검색에 ELEMENTS 사용 SELECT Invoice.OrderID InvoiceNo, OrderDate, ProductID, Quantity FROM Orders Invoice JOIN [Order Details] Item ON Invoice.OrderID = Item.OrderID WHERE Invoice.OrderID = 10248 FOR XML Auto, ELEMENTS 결과 요서 중심적 으로 결과 리턴 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode FOR XML EXPLICIT Mode 복잡한 구문 규칙 필요 하지만 매우 강력 Tag 컬럼 – 각각의 열을 표현하기 위하여 Parent 컬럼 – 요소 중접 컨트롤 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode EXPLICIT Mode 의 매개변수 Element : 이 컬럼의 데이터가 인코딩되며 XML 결과의 하위 요소로 표현되게 할때 사용 XML : XML 결과의 하위 요소로 해당컬럼 표현 되어야 한다 Hide : 특정 컬럼이 테이블 형 데이터에 존재하는 것을 인식하지만 XML 결과로 리턴되지 않게 Cdata : 결과로 생긴 XML 데이터에 CDATA 섹션으로 컬럼 표현한다 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode XMLText : 오버플로우 컬럼의 XML 데이터 추출에 사용되고 오버플로우 컬럼은 현재 요소에 더할 경우 사용된다. 오버플로우 컬럼이 테이블의 다른 곳에 속하지 않는 XML 문자열을 사용자가 지정해 저장하기 위해 사용된다 ID , IDREF, IDREFS : XMLDATA 옵션과 함께 ID, IDREF, 또는 IDREFS형 속성을 인라인 스키마로 리턴할때 사용된다. 여러 문서를 상호 교환 시요소간 관계를 생성할 때 유용하게 사용이 가능하다 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode Element와 XML 명령을 하위 요소로 추출 컬럼의 데이터가 속성으로 표현되기 보다는 하위 요소로 처리되어야 한다는 것을 지정 SELECT 1 AS Tag, NULL AS Parent, ProductID AS [Item!1], OrderID AS [Item!1!InvoiceNo], UnitPrice AS [Item!1!Price!element] FROM [Order Details] WHERE OrderID = 10248 FOR XML EXPLICIT Price Node 는 Item 의 하위 노드이다는 것을 보여줌 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode Hide 명령 사용한 데이터 정렬 결과로 보여지기 원하지 않는 컬럼 Hide 사용 ORDER BY 사용시 매우 유용 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode XML 값 추출을 위한 xmltext 명령 사용 SELECT 1 AS Tag, NULL AS Parent, companyname AS [customer!1!companyname], phone AS [customer!1!phone], overflow AS [customer!1!overflow!xmltext] FROM Customers WHERE CustomerID = 'AROUT' FOR XML EXPLICIT <customer companyname=“Around the Horn” Phone=“(171) 555-7788”> <overflow email=sales@aroundhorn.co.uk site=www.aroundhorn.co.uk /> </customer> 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode Cdata 명령을 이용한 CDATA 추출 XML 파싱할때 <this> 를 텍스트 자체로 인식 원하기 위하여 XML 경우 <this> 는 엘리먼트로 인식하기 때문에 SELECT 1 AS Tag, NULL AS Parent, companyname AS [customer!1!companyname], phone AS [customer!1!!cdata] FROM customers WHERE CustomerID = 'AROUT' FOR XML EXPLICIT 결과 중앙대학교 Database 연구실
FOR XML EXPLICIT Mode ID, IDREF, IDREFS 명령과 XMLDATA 옵션 사용 Schema 가 문서의 구조를 정의 할때 관계형 필드를 식별하는 유용 하나의 엔티니와 다른 소속된 필드 연결을 식별할때 유용 중앙대학교 Database 연구실
FOR XML XML 이름 공간 추가 XML 문서의 정보 교환을 위한 측면 이름 공간 특성을 만들어야 함 서로 다른 어휘를 명확하게 어휘의 소유권 식별 XML Schema 정보를 XML 요소 나 특성에 연결 이름 공간 특성을 만들어야 함 EXPLICIT 모드 사용하여 쿼리를 작성하여 문서를 새로운 구조로 만들어야 함 EXPLICIT 모드는 마음대로 XML 요소들을 혼합하여 임의의 모양을 만들 수 있음 중앙대학교 Database 연구실
FORXML FORXML 결과 할당 FOR XML 의 결과를 변수나 열에 삽입가능 DECLARE @cust XML; SET @cust = (SELECT * FROM Customers FOR XML AUTO, TYPE) CREATE TABLE T(i int, x XML) INSERT INTO T SELECT 1, (SELECT * FROM Customers FOR XML AUTO, TYPE) 중앙대학교 Database 연구실
FOR XML FOR XML 식의 중첩 XML 데이터 형식 열을 인식하고 하위 요소로 직렬화 하기 때문에 FOR XML 중첩 사용 가능 SELECT CustomerID as "CustomerID", (SELECT OrderID as "OrderID" FROM Orders "Order" WHERE "Order".CustomerID = Customer.CustomerID FOR XML AUTO, TYPE), (SELECT DISTINCT LastName as "LastName" FROM Employees Employee JOIN Orders "Order" ON "Order".EmployeeID = Employee.EmployeeID WHERE Customer.CustomerID = "Order".CustomerID FOR XML AUTO, TYPE) FROM Customers Customer FOR XML AUTO, TYPE 중앙대학교 Database 연구실
FOR XML 결과 Customer 요소와 그 속성 요소를 이름 공간 urn:example.com/customer 에 넣기 SELECT 1 as tag, NULL as parent, 'urn:example.com/customer' as "cust:Customer!1!xmlns:cust", CustomerID as "cust:Customer!1!cust:CustomerID!element", ContactName as "cust:Customer!1!cust:ContactName!element" FROM Customers FOR XML EXPLICIT 중앙대학교 Database 연구실
FOR XML 2005 추가 FOR XML 기능 확장 1. ELEMENT 지시어와 결합가능 및 행 요소 이름 덮어 쓸 수 있음 SELECT * FROM Customers FOR XML RAW('Customer') SELECT * FROM Customers FOR XML RAW('Customer'), ELEMENTS 중앙대학교 Database 연구실
FOR XML 2. ELEMENT 지시어는 NULL 값을 xsi:nil = “true” 특성 요소에 매핑하는 XSINIL 제공 SELECT * FROM Customers WHERE Region is null FOR XML PATH('Customer'), ELEMENTS XSINIL 중앙대학교 Database 연구실
FOR XML 3. XMLSCHEMA 추가 지시어 포함 선택적 인수로 대상 이름공간 URI를 사용하는 새로운 인라인 스키마 지시어 SELECT * FROM Customers FOR XML RAW('Customer'), XMLSCHEMA('urn:example.com') 중앙대학교 Database 연구실
OPENXML 테이블 또는 뷰와 비슷한 메모리 내 XML 문서에 대한 행 집합 제공 OpenXML 을 사용한 질의처리 중앙대학교 Database 연구실 OpenXML 을 사용한 질의처리
OPENXML XML 문서를 RDB 형태로 사용 XML 문서를 메모리 상 RDB 형 결과로 유지한다 SELECT 문의 끝의 OPENXML 절을 붙여 사용한다 ResultSet 을 원하는 형태로 유지가능 메모리에 유지되는 ResultSet 에 Insert & Update & Delete 질의 가능 중앙대학교 Database 연구실
OPENXML 저장 프로시저에 XML 데이터 전송 데이터형 최대 크기 문서의 최대 크기를 충분히 저장할수 있게 Char 8000 문자 (고정) Varchar 8000 문자 (가변) nChar 4000 문자 (고정) nVarchar 4000 문자 (가변) Text 2,147,483,647 문자 nText 1,073,741,823 문자 중앙대학교 Database 연구실
OPENXML XML 문서 파싱과 조각화(Shredding) OPENXML 전 XML 파싱 과 노드 매핑 필요 Sp_xml_preparedocument 가 문서를 읽고 유요한 XML 문서인지 검증한다. 검증된 후 DOM 형태로 노드 트리 생성됨 XML 문서의 로우셋 데이터를 리턴하기 위해 OpenXML 사용가능 <Order> … </Order> Sp_xml_preparedocument SELECT * FROM OPENXML 중앙대학교 Database 연구실
OPENXML sp_xml_preparedocument sp_xml_removedocument OPENXML에서 사용할 XML을 준비해주는 시스템 내장 함수 항상 OPENXML 절 앞에 위치한다. Ex) EXEC sp_xml_preparedocument @hDoc OUTPUT, @DocIn, ‘<root xmlns:xyz=“run:<MyNamespace”/>’ sp_xml_removedocument 세션이 끝나면 메모리에 있던 XML를 릴리즈시키고 문서를 참조하고있던 레퍼런스들을 제거 시키는 시스템 내장함수 SQL App 의 메모리 누수 현상 방지한다 Ex) EXEC sp_xml_removedocument @hDoc 중앙대학교 Database 연구실
OPENXML 기본 Syntax OPENXML Parameter XML 문서 핸들 (idoc) Sp_xml_preapredocument 저장 프로시저에서 반환 처리될 노드 식별 Xpath식 (rowpattern) Rowpattern 으로 지정된 Xpath 식은 문서의 노드집합 집합을 식별함 OPENXML (iDoc int [in], Rowpattern nvarchar[in], [Flags byte[in]]) [WITH (SchemaDeclaration |TableName)] 중앙대학교 Database 연구실
OPENXML Flags Rowpattern 에 의해 식별된 노드는 각각 OPENXML에 의해 생성되는 행 집합의 단일 행 OPENXML을 통해 처리하고 싶은 XML 문서의 특정 노드 ( XPATH 사용 ) Flags OPENXML 로 만들어지는 결과 문서의 형태 지정 Flags Byte Value 0: default, Attribute-centric mapping 1: Explicitly indicates that the source XML should be mapped to the resultset using an attribute-centric mapping. 중앙대학교 Database 연구실
OPENXML WITH ResultSet 모양 설정 및 ResultSet 테이블의 칼럼과 XML 노드의 매핑 관계 설정 2: Explicitly indicates that the source XML should be mapped to the resultset using an element-centric mapping. 8: This value explicitly state that only unconsumed data should be copied to the overflow property, @mp:xmltext 각 Flag는 조합이 가능하다. 0,1,2,3,8,9,10,11 값이 나올 수 있다. WITH ResultSet 모양 설정 및 ResultSet 테이블의 칼럼과 XML 노드의 매핑 관계 설정 중앙대학교 Database 연구실
OPENXML 세가지 형태의 테이블 가능 WITH TName : 존재하는 테이블 기초 사용 WITH (Name varchar(20), ‘ROOT/Name’) : 직접 생성 Omit the clause altogether : Edge table형태로 받는다. Edge table 소스 XML의 모든 edge가 resultset의 row에 매치됨 중앙대학교 Database 연구실
OPENXML 예제 : @doc XML 문서를 With 절 형태의 RDB 테이블에 매핑 중앙대학교 Database 연구실
OPENXML With Tname 예제 WITH (Name varchar(20), ‘ROOT/Name’) 예제 -- Execute a SELECT statement that uses the OPENXML rowset provider. SELECT * FROM OPENXML (@idoc, '/ROOT/Customer',1) WITH Track -- Execute a SELECT statement that uses the OPENXML rowset SELECT * FROM OPENXML (@idoc, '/ROOT/Customer',1) WITH (CustomerID varchar(10), ContactName varchar(20)) 중앙대학교 Database 연구실
OPENXML Insert -- Create an internal representation of the XML document. EXEC sp_xml_preparedocument @hdoc OUTPUT, @cDoc -- Execute a SELECT statement using OPENXML rowset provider. INSERT Media(Type) SELECT DISTINCT [Media Type] FROM OPENXML (@hdoc, '/ROOT/Artist/Media',1) WITH ( [Media Type] varchar(10) '@Type') 중앙대학교 Database 연구실
OPENXML 테이블을 생성하면서 데이터 삽입 SELECT INTO 구문사용 @iTree 로 참조된 XML 문서를 Product 테이블에 넣기 SELECT * INTO Product FROM OPENXML (@iTree, ‘Prodcut’, 1) WITH (ProductID INTEGER, ProductName VARCHAR (20), UnitPrice MONEY) 중앙대학교 Database 연구실
OPENXML Delete DELETE FROM Album WHERE AlbumID IN( SELECT Available, AlbumName FROM OPENXML (@hDoc, ‘/ROOT/Artist/Media’,1) WITH (Available varchar(3) ‘Available’,AlbumName varchar(50) ‘Name’) o WHERE o.Available = ‘NO’) 중앙대학교 Database 연구실
OPENXML Update UPDATE Track SET TrackLength = o.Length FROM ( SELECT Length, AlbumName, TrackName FROM OPENXML (@hdoc, '/ROOT/Artist/Media/TrackList/Track',1) WITH ( Length varchar(5) '@Length', AlbumName varchar(50) '../../Name', TrackName varchar(50) '.') ) o, Album a WHERE o.AlbumName = a.[Name] AND Track.AlbumID = a.AlbumID AND o.TrackName = Track.[Name] 중앙대학교 Database 연구실