OPENXML(SQL Server)OPENXML (SQL Server)

Transact-SQLTransact-SQL 키워드인 OPENXML은 테이블 또는 뷰와 비슷한 메모리 내 XML 문서에 대한 행 집합을 제공합니다.OPENXML, a Transact-SQLTransact-SQL keyword, provides a rowset over in-memory XML documents that is similar to a table or a view. OPENXML은 관계형 행 집합인 것처럼 XML 데이터에 대한 액세스를 허용합니다.OPENXML allows access to XML data as though it is a relational rowset. 이러한 기능은 XML 문서의 내부 표현에 대한 행 집합 뷰를 제공함으로써 제공됩니다.It does this by providing a rowset view of the internal representation of an XML document. 행 집합의 레코드는 데이터베이스 테이블에 저장할 수 있습니다.The records in the rowset can be stored in database tables.

OPENXML은 행 집합 공급자, 뷰 또는 OPENROWSET이 원본으로 표시될 수 있는 경우 SELECT 및 SELECT INTO에서 사용할 수 있습니다.OPENXML can be used in SELECT and SELECT INTO statements wherever rowset providers, a view, or OPENROWSET can appear as the source. OPENXML 구문에 대한 자세한 내용은 OPENXML(Transact-SQL)을 참조하세요.For information about the syntax of OPENXML, see OPENXML (Transact-SQL).

OPENXML을 사용하여 XML 문서에 대해 쿼리를 작성하려면 먼저 sp_xml_preparedocument를 호출해야 합니다.To write queries against an XML document by using OPENXML, you must first call sp_xml_preparedocument. 이 메서드는 XML 문서를 구문 분석하고 사용할 준비가 된 구문 분석된 문서에 핸들을 반환합니다.This parses the XML document and returns a handle to the parsed document that is ready for consumption. 구문 분석된 문서는 XML 문서의 여러 노드를 DOM(문서 개체 모델) 트리로 표시합니다.The parsed document is a document object model (DOM) tree representation of various nodes in the XML document. 문서 핸들은 OPENXML에 전달됩니다.The document handle is passed to OPENXML. 그런 다음 OPENXML은 전달된 매개 변수에 따라 문서의 행 집합 뷰를 제공합니다.OPENXML then provides a rowset view of the document, based on the parameters passed to it.

참고

sp_xml_preparedocument 에서는 MSXML 파서가 SQL로 업데이트된 버전인 Msxmlsql.dll을 사용합니다. sp_xml_preparedocument uses a SQL-updated version of the MSXML parser, Msxmlsql.dll. 이 버전의 MSXML 파서는 SQL ServerSQL Server 를 지원하고 MSXML 버전 2.6에 대한 이전 버전과의 호환성을 유지하도록 디자인되었습니다.This version of the MSXML parser was designed to support SQL ServerSQL Server and remain backward compatible with MSXML version 2.6.

메모리를 확보하기 위해서는 sp_xml_removedocument 시스템 저장 프로시저를 호출하여 메모리에서 XML 문서의 내부 표현을 제거해야 합니다.The internal representation of an XML document must be removed from memory by calling the sp_xml_removedocument system stored procedure to free the memory.

다음 그림은 이 프로세스를 보여 줍니다.The following illustration shows the process.

OPENXML을 통한 XML 구문 분석Parsing XML with OPENXML

OPENXML을 이해하려면 XPath 쿼리에 익숙해야 하며 XML을 이해해야 합니다.Note that to understand OPENXML, familiarity with XPath queries and an understanding of XML is required. SQL Server의 XPath 지원에 대한 자세한 내용은 SQLXML 4.0의 XPath 쿼리 사용을 참조하세요.For more information about XPath support in SQL Server, see Using XPath Queries in SQLXML 4.0.

참고

OpenXML을 사용하면 행 및 열의 XPath 패턴을 변수로 매개 변수화할 수 있습니다.OpenXML allows the row and column XPath patterns to be parameterized as variables. 프로그래머가 매개 변수화를 외부 사용자에게 제공하는 경우(예를 들어 외부적으로 호출된 저장 프로시저를 통해 매개 변수가 제공되는 경우) 이러한 매개 변수화를 수행하면 XPath 식이 삽입될 수 있습니다.Such parameterization could lead to XPath expression injections, if the programmer exposes the parameterization to outside users (for example, if the parameters are provided via an externally called stored procedure). 이러한 잠재적 보안 문제를 방지하려면 XPath 매개 변수를 외부 호출자에게 제공하지 않는 것이 좋습니다.To avoid such potential security issues, it is recommended that XPath parameters should never be exposed to external callers.

예제Example

다음 예에서는 OPENXMLINSERT 문에서 SELECT 을 사용하는 방법을 보여 줍니다.The following example shows the use of OPENXML in an INSERT statement and a SELECT statement. 예제 XML 문서에 <Customers><Orders> 요소가 들어 있습니다.The sample XML document contains <Customers> and <Orders> elements.

우선 sp_xml_preparedocument 저장 프로시저가 XML 문서를 구문 분석합니다.First, the sp_xml_preparedocument stored procedure parses the XML document. 구문 분석된 문서는 XML 문서의 노드(요소, 특성, 텍스트 및 주석)를 트리로 나타낸 것입니다.The parsed document is a tree representation of the nodes (elements, attributes, text, and comments) in the XML document. OPENXML 은 이 구문 분석된 XML 문서를 참조하여 해당 XML 문서의 일부 또는 전체에 대한 행 집합 뷰를 제공합니다.OPENXML then refers to this parsed XML document and provides a rowset view of all or parts of this XML document. INSERT 을 사용하는 OPENXML 문은 그러한 행 집합의 데이터를 데이터베이스 테이블에 삽입할 수 있습니다.An INSERT statement using OPENXML can insert data from such a rowset into a database table. OPENXML 을 여러 번 호출하면 XML 문서의 여러 부분에 대한 행 집합 뷰를 제공하고, XML 문서의 여러 부분을 다른 테이블에 삽입하는 등 다양하게 처리할 수 있습니다.Several OPENXML calls can be used to provide a rowset view of various parts of the XML document and process them, for example, by inserting them into different tables. 이 프로세스는 XML을 테이블로 조각화한다라고도 합니다.This process is also referred to as shredding XML into tables.

다음 예에서는 두 개의 <Customers> 문을 사용하여 Customers 요소를 <Orders> 테이블에 저장하고 Orders 요소를 INSERT 테이블에 저장하는 방식으로 XML 문서가 조각화됩니다.In the following example, an XML document is shredded in a way that <Customers> elements are stored in the Customers table and <Orders> elements are stored in the Orders table by using two INSERT statements. 또한 XML 문서에서 SELECTOPENXML 를 검색하는 CustomerID 이 포함된 OrderDate 문을 보여 줍니다.The example also shows a SELECT statement with OPENXML that retrieves CustomerID and OrderDate from the XML document. 이 과정의 마지막 단계에서 sp_xml_removedocument를 호출합니다.The last step in the process is to call sp_xml_removedocument. 이 작업은 구문 분석 단계 중에 생성된 내부 XML 트리를 표시하는 데 할당된 메모리를 해제하기 위해 수행합니다.This is done in order to release the memory allocated to contain the internal XML tree representation that was created during the parse phase.

-- Create tables for later population using OPENXML.  
CREATE TABLE Customers (CustomerID varchar(20) primary key,  
                ContactName varchar(20),   
                CompanyName varchar(20));  
GO  
CREATE TABLE Orders( CustomerID varchar(20), OrderDate datetime;)  
GO  
DECLARE @docHandle int;  
DECLARE @xmlDocument nvarchar(max); -- or xml type  
SET @xmlDocument = N'<ROOT>  
<Customers CustomerID="XYZAA" ContactName="Joe" CompanyName="Company1">  
<Orders CustomerID="XYZAA" OrderDate="2000-08-25T00:00:00"/>  
<Orders CustomerID="XYZAA" OrderDate="2000-10-03T00:00:00"/>  
</Customers>  
<Customers CustomerID="XYZBB" ContactName="Steve"  
CompanyName="Company2">No Orders yet!  
</Customers>  
</ROOT>';  
EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument;  
-- Use OPENXML to provide rowset consisting of customer data.  
INSERT Customers   
SELECT *   
FROM OPENXML(@docHandle, N'/ROOT/Customers')   
  WITH Customers;  
-- Use OPENXML to provide rowset consisting of order data.  
INSERT Orders   
SELECT *   
FROM OPENXML(@docHandle, N'//Orders')   
  WITH Orders;  
-- Using OPENXML in a SELECT statement.  
SELECT * FROM OPENXML(@docHandle, N'/ROOT/Customers/Orders') WITH (CustomerID nchar(5) '../@CustomerID', OrderDate datetime);  
-- Remove the internal representation of the XML document.  
EXEC sp_xml_removedocument @docHandle;   

다음 그림에서는 sp_xml_preparedocument에 의해 생성된 이전 XML 문서의 구문 분석된 XML 트리를 보여 줍니다.The following illustration shows the parsed XML tree of the previous XML document that was created by using sp_xml_preparedocument.

구문 분석된 XML 트리Parsed XML tree

OPENXML 매개 변수OPENXML Parameters

OPENXML에 대한 매개 변수는 다음과 같습니다.The parameters to OPENXML include the following:

  • XML 문서 핸들(idoc)An XML document handle (idoc)

  • 행에 매핑될 노드를 식별하기 위한 XPath 식(rowpattern)An XPath expression to identify the nodes to be mapped to rows (rowpattern)

  • 생성될 행 집합에 대한 설명A description of the rowset to be generated

  • 행 집합 열과 XML 노드 간의 매핑Mapping between the rowset columns and the XML nodes

XML 문서 핸들(idoc)XML Document Handle (idoc)

이 문서 핸들은 sp_xml_preparedocument 저장 프로시저에서 반환됩니다.The document handle is returned by the sp_xml_preparedocument stored procedure.

처리될 노드를 식별하는 XPath 식(rowpattern)XPath Expression to Identify the Nodes to Be Processed (rowpattern)

rowpattern 으로 지정된 XPath 식은 XML 문서의 노드 집합을 식별합니다.The XPath expression specified as rowpattern identifies a set of nodes in the XML document. rowpattern 에 의해 식별되는 노드는 각각 OPENXML에 의해 생성되는 행 집합의 단일 행에 해당됩니다.Each node that is identified by rowpattern corresponds to a single row in the rowset that is generated by OPENXML.

XPath 식에 의해 식별되는 노드는 XML 문서의 모든 XML 노드일 수 있습니다.The nodes identified by the XPath expression can be any XML node in the XML document. rowpattern 이 XML 문서의 요소 집합을 식별하는 경우 식별되는 각 요소 노드에 대한 행 집합에는 한 개의 행이 있게 됩니다.If rowpattern identifies a set of elements in the XML document, there is one row in the rowset for each element node identified. 예를 들어 rowpattern 이 특성으로 끝나면 rowpattern에 의해 선택되는 각 특성 노드에 대해 한 개의 행이 만들어집니다.For example, if rowpattern ends in an attribute, a row is created for each attribute node selected by rowpattern.

생성될 행 집합에 대한 설명Description of the Rowset to Be Generated

행 집합 스키마는 결과 행 집합을 생성하기 위해 OPENXML에 의해 사용됩니다.A rowset schema is used by OPENXML to generate the resulting rowset. 행 집합 스키마를 지정할 때 다음 옵션을 사용할 수 있습니다.You can use the following options when specifying a rowset schema.

Edge 테이블 형식 사용Using the Edge Table Format

행 집합 스키마를 지정하려면 Edge 테이블 형식을 사용해야 합니다.You should use the edge table format to specify a rowset schema. WITH 절을 사용하지 마십시오.Do not use the WITH clause.

WITH 절을 사용하면 OPENXML이 행 집합을 Edge 테이블 형식으로 반환합니다.When you do this, OPENXML returns a rowset in the edge table format. 이 테이블은 구문 분석된 XML 문서 트리의 가장 자리에 있는 모든 노드가 행 집합의 행으로 매핑되기 때문에 Edge 테이블이라고 부릅니다.This is referred to as an edge table, because every edge in the parsed XML document tree maps to a row in the rowset.

Edge 테이블은 단일 테이블 내에 세부적인 XML 문서 구조를 나타냅니다.Edge tables represent within a single table the fine-grained XML document structure. 이 구조에는 요소 및 특성 이름, 문서 계층, 네임스페이스 및 처리 명령이 포함됩니다.This structure includes the element and attribute names, the document hierarchy, the namespaces, and the processing instructions. Edge 테이블 형식을 사용하면 메타 속성을 통해 제공되지 않은 정보를 추가로 얻을 수 있습니다.The edge table format allows you to obtain additional information that is not exposed through the metaproperties. 메타 속성에 대한 자세한 내용은 Specify Metaproperties in OPENXML을 참조하십시오.For more information about metaproperties, see Specify Metaproperties in OPENXML.

Edge 테이블에서 제공되는 추가 정보를 사용하면 요소 및 특성의 데이터 형식과 노드 유형을 저장 및 쿼리할 수 있으며 XML 문서 구조에 대한 정보를 저장 및 쿼리할 수도 있습니다.The additional information provided by an edge table allows you to store and query the data type of an element and attribute, and the node type, and also store and query information about the XML document structure. 이 추가 정보를 사용하면 자체 XML 문서 관리 시스템을 구축할 수도 있습니다.With this additional information, it may also be possible to build your own XML document management system.

Edge 테이블을 사용하면 XML 문서를 BLOB(Binary Large Object) 입력으로 사용하고 Edge 테이블을 생성한 다음 보다 세부적인 수준에서 문서를 추출 및 분석하는 저장 프로시저를 작성할 수 있습니다.By using an edge table, you can write stored procedures that take XML documents as binary large object (BLOB) input, produce the edge table, and then extract and analyze the document on a more detailed level. 이러한 세부적인 수준에는 문서 계층, 요소 및 특성 이름, 네임스페이스 및 처리 명령 검색이 포함됩니다.This detailed level could include finding the document hierarchy, the element and attribute names, the namespaces, and the processing instructions.

또한 Edge 테이블은 다른 관계형 형식에 대한 매핑이 논리적이지 않은 경우와 ntext 필드가 구조 정보를 충분히 제공하지 않는 경우, XML 문서에 대한 저장소 형식으로 사용할 수 있습니다.The edge table also can serve as a storage format for XML documents when mapping to other relational formats is not logical and an ntext field is not providing enough structural information.

XML 파서를 사용하여 XML 문서를 검사할 수 있는 경우 Edge 테이블을 대신 사용해도 동일한 정보를 가져올 수 있습니다.In situations where you can use an XML parser to examine an XML document, you can use an edge table instead to obtain the same information.

다음 표에서는 Edge 테이블의 구조에 대해 설명합니다.The following table describes the structure of the edge table.

열 이름Column name 데이터 형식Data type 설명Description
idid bigintbigint 문서 노드의 고유 ID입니다.Is the unique ID of the document node.

루트 요소의 ID 값은 0입니다.The root element has an ID value of 0. 음수 ID 값은 예약된 값입니다.The negative ID values are reserved.
parentidparentid bigintbigint 노드의 부모를 나타냅니다.Identifies the parent of the node. 이 ID로 식별된 부모는 부모 요소가 아닐 수도 있습니다.The parent identified by this ID is not necessarily the parent element. 하지만 부모 요소인지 여부는 부모가 이 ID에 의해 식별되는 노드의 NodeType에 따라 달라집니다.However, this depends on the NodeType of the node whose parent is identified by this ID. 예를 들어 노드가 텍스트 노드인 경우 해당 부모는 특성 노드일 수 있습니다.For example, if the node is a text node, its parent may be an attribute node.

노드가 XML 문서의 최상위 수준에 있으면 해당 ParentID 는 NULL입니다.If the node is at the top level in the XML document, its ParentID is NULL.
node typenode type intint 노드 유형을 식별하며 XML 개체 모델(DOM) 노드 유형의 지정 번호에 해당하는 정수입니다.Identifies the node type and is an integer that corresponds to the XML object model (DOM) node type numbering.

다음은 이 열에 표시될 수 있는 노드 유형을 나타내는 값입니다.Following are the values that can appear in this column to indicate the node type:

1 = 요소 노드1 = Element node

2 = 특성 노드2 = Attribute node

3 = 텍스트 노드3 = Text node

4 = CDATA 섹션 노드4 = CDATA section node

5 = 엔터티 참조 노드5 = Entity reference node

6 = 엔터티 노드6 = Entity node

7 = 처리 명령 노드7 = Processing instruction node

8 = 주석 노드8 = Comment node

9 = 문서 노드9 = Document node

10 = 문서 유형 노드10 = Document Type node

11 = 문서 조각 노드11 = Document Fragment node

12 = 표기법 노드12 = Notation node

자세한 내용은 MSXML(Microsoft XML) SDK의 "nodeType Property" 항목을 참조하십시오.For more information, see the "nodeType Property" topic in the Microsoft XML (MSXML) SDK.
localnamelocalname nvarchar(max)nvarchar(max) 요소 또는 특성의 로컬 이름을 지정합니다.Gives the local name of the element or attribute. DOM 개체에 이름이 없는 경우에는 NULL입니다.Is NULL if the DOM object does not have a name.
prefixprefix nvarchar(max)nvarchar(max) 노드 이름의 네임스페이스 접두사입니다.Is the namespace prefix of the node name.
namespaceurinamespaceuri nvarchar(max)nvarchar(max) 노드의 네임스페이스 URI입니다.Is the namespace URI of the node. 값이 NULL이면 네임스페이스가 없는 것입니다.If the value is NULL, no namespace is present.
datatypedatatype nvarchar(max)nvarchar(max) 요소 또는 특성 행의 실제 데이터 형식이며, 그렇지 않은 경우에는 NULL입니다.Is the actual data type of the element or attribute row and is otherwise NULL. 데이터 형식은 인라인 DTD 또는 인라인 스키마로부터 추정할 수 있습니다.The data type is inferred from the inline DTD or from the inline schema.
prevprev bigintbigint 이전의 형제 요소에 대한 XML ID입니다.Is the XML ID of the previous sibling element. 바로 이전의 형제가 없으면 NULL입니다.Is NULL if there is no direct previous sibling.
texttext ntextntext 특성 값 또는 텍스트 형식의 요소 내용이 포함됩니다.Contains the attribute value or the element content in text form. 또는 Edge 테이블 항목에 값이 필요하지 않은 경우 NULL입니다.Or is NULL, if the edge table entry does not need a value.

WITH 절을 사용하여 기존 테이블 지정Using the WITH Clause to Specify an Existing Table

WITH 절을 사용하여 기존 테이블의 이름을 지정할 수 있습니다.You can use the WITH clause to specify the name of an existing table. 이렇게 하려면 행 집합을 생성하기 위해 OPENXML이 사용할 수 있는 스키마의 기존 테이블 이름만 지정하면 됩니다.To do this, just specify an existing table name whose schema can be used by OPENXML to generate the rowset.

WITH 절을 사용하여 스키마 지정Using the WITH Clause to Specify a Schema

WITH 절을 사용하여 완전한 스키마를 지정할 수 있습니다.You can use the WITH Clause to specify a complete schema. 행 집합 스키마를 지정할 때 열 이름과 그에 해당되는 데이터 형식 및 XML 문서에 대한 매핑을 지정합니다.In specifying the rowset schema, you specify the column names, their data types, and their mapping to the XML document.

SchemaDeclaration에서 ColPattern 매개 변수를 사용하여 열 패턴을 지정할 수 있습니다.You can specify the column pattern by using the ColPattern parameter in the SchemaDeclaration. 지정된 열 패턴은 행 집합 열을 rowpattern에 의해 식별되는 XML 노드에 매핑할 뿐 아니라 매핑 유형을 결정하기 위해서도 사용됩니다.The specified column pattern is used to map a rowset column to the XML node that is identified by rowpattern and is also used to determine the type of mapping.

열에 대해 ColPattern이 지정되지 않은 경우에는 flags 매개 변수로 지정된 매핑을 기준으로 동일한 이름을 갖는 XML 노드에 행 집합 열이 매핑됩니다.If ColPattern is not specified for a column, the rowset column maps to the XML node with the same name, based on the mapping specified by the flags parameter. 그러나 ColPattern이 WITH 절에서 스키마 지정의 일부로 지정된 경우에는 flags 매개 변수에 지정된 매핑을 덮어씁니다.However, if ColPattern is specified as part of the schema specification in the WITH clause, it overwrites the mapping that is specified in the flags parameter.

행 집합 열과 XML 노드 간의 매핑Mapping Between the Rowset Columns and the XML Nodes

OPENXML 문에서는 행 집합 열과 rowpattern에 의해 식별된 XML 노드 간에 매핑 유형(특성 중심, 요소 중심)을 지정할 수도 있습니다.In the OPENXML statement, you can optionally specify the type of mapping, such as attribute-centric or element-centric, between the rowset columns and the XML nodes that are identified by the rowpattern. 이 정보는 XML 노드와 행 집합 열 간의 변환에 사용됩니다.This information is used in the transformation between the XML nodes and the rowset columns.

매핑은 다음 두 가지 방식으로 지정할 수 있으며 두 방식을 모두 지정할 수도 있습니다.You can specify the mapping in two ways, and you can also specify both:

  • flags 매개 변수 사용By using the flags parameter

    flags 매개 변수로 지정되는 매핑은 XML 노드가 동일한 이름을 가진 해당 행 집합 열에 매핑되는 이름 일치를 전제로 합니다.The mapping that is specified by the flags parameter assumes name correspondence in which the XML nodes map to the corresponding rowset columns with same name.

  • ColPattern 매개 변수 사용By using the ColPattern parameter

    XPath 식인ColPattern은 WITH 절에서 SchemaDeclaration 의 일부로 지정됩니다.ColPattern, an XPath expression, is specified as part of SchemaDeclaration in the WITH clause. ColPattern 에 지정된 매핑은 flags 매개 변수로 지정된 매핑에 우선합니다.The mapping specified in ColPattern overwrites the mapping specified by the flags parameter.

    ColPattern 을 사용하면 flags로 표시된 기본 매핑을 덮어쓰거나 향상시키는 특성 중심이나 요소 중심과 같은 매핑 유형을 지정할 수 있습니다.ColPattern can be used to specify the type of mapping, such as attribute-centric or element-centric, that overwrites or enhances the default mapping indicated by the flags.

    ColPattern 은 다음 상황에서 지정됩니다.ColPattern is specified under the following circumstances:

    • 행 집합의 열 이름이 매핑될 요소 또는 특성 이름과 다릅니다.The column name in the rowset is different from the element or attribute name to which it is mapped. 이 경우 ColPattern 을 사용하여 행 집합 열이 매핑될 XML 요소와 특성 이름을 식별합니다.In this case, ColPattern is used to identify the XML element and attribute name to which the rowset column maps.

    • 메타 속성 특성을 열에 매핑하려는 경우You want to map a metaproperty attribute to the column. 이 경우 ColPattern 을 사용하여 행 집합 열이 매핑될 메타 속성을 식별합니다.In this case, ColPattern is used to identify the metaproperty to which the rowset column maps. 메타 속성을 사용하는 방법에 대한 자세한 내용은 OPENXML에 메타 속성 지정을 참조하세요.For more information about how to use metaproperties, see Specify Metaproperties in OPENXML.

    flagsColPattern 매개 변수는 모두 선택 사항입니다.Both the flags and ColPattern parameters are optional. 매핑을 지정하지 않으면 특성 중심 매핑으로 간주됩니다.If no mapping is specified, attribute-centric mapping is assumed. 특성 중심 매핑은 flags 매개 변수의 기본값입니다.Attribute-centric mapping is the default value of the flags parameter.

특성 중심 매핑Attribute-centric Mapping

OPENXML의 flags 매개 변수를 1(XML_ATTRIBUTES)로 설정하면 특성 중심 매핑이 지정됩니다.Setting the flags parameter in OPENXML to 1 (XML_ATTRIBUTES) specifies attribute-centric mapping. flags 에 XML_ATTRIBUTES가 포함된 경우 제공된 행 집합은 각 XML 요소가 하나의 행으로 표시되는 행을 제공하거나 소비합니다.If flags contains XML_ ATTRIBUTES, the exposed rowset provides or consumes rows where each XML element is represented as a row. XML 특성은 이름 일치 여부에 따라 SchemaDeclaration에 정의되어 있거나 WITH 절의 Tablename으로 제공되는 특성에 매핑됩니다.The XML attributes are mapped to the attributes that are defined in the SchemaDeclaration or that are provided by the Tablename of the WITH clause, based on name correspondence. 이름 일치란 특정 이름의 XML 특성이 동일한 이름의 행 집합의 열로 저장되는 것을 의미합니다.Name correspondence means that the XML attributes of a particular name are stored in a column in the rowset with the same name.

열 이름이 매핑될 특성 이름과 다른 경우에는 ColPattern 을 지정해야 합니다.If the column name is different from the attribute name that it maps to, ColPattern must be specified.

XML 특성에 네임스페이스 한정자가 있으면 행 집합의 열 이름에도 한정자가 있어야 합니다.If the XML attribute has a namespace qualifier, the column name in the rowset must also have the qualifier.

요소 중심 매핑Element-centric Mapping

OPENXML의 flags 매개 변수를 2(XML_ELEMENTS)로 설정하면 요소 중심 매핑이 지정됩니다.Setting the flags parameter in OPENXML to 2 (XML_ELEMENTS) specifies element-centric mapping. 요소 중심 매핑은 다음 사항을 제외하고 특성 중심 매핑과 비슷합니다.It is similar to attribute-centric mapping, except for the following differences:

  • 열 수준 패턴이 지정되지 않은 경우, 매핑 예의 이름 일치(동일한 이름의 XML 요소에 대한 열 매핑)는 복잡하지 않은 하위 요소를 선택합니다.The name correspondence of the mapping example, a column mapping to an XML element with the same name chooses the noncomplex subelements, unless a column-level pattern is specified. 검색 프로세스에서 하위 요소가 복잡하면(하위 요소가 더 있는 경우) 해당 열이 NULL로 설정됩니다.In the retrieval process, if the subelement is complex because it contains additional subelements, the column is set to NULL. 하위 요소의 특성 값은 무시됩니다.Attribute values of the subelements are then ignored.

  • 동일 이름의 하위 요소가 여러 개 있는 경우 첫 번째 노드가 반환됩니다.For multiple subelements that have the same name, the first node is returned.

참고 항목See Also

sp_xml_preparedocument(Transact-SQL) sp_xml_preparedocument (Transact-SQL)
sp_xml_removedocument(Transact-SQL) sp_xml_removedocument (Transact-SQL)
OPENXML(Transact-SQL) OPENXML (Transact-SQL)
XML 데이터(SQL Server) XML Data (SQL Server)