OPENXML (Transact-SQL)
OPENXML, bir XML belgesi üzerinde satır kümesi kümesi görünümü sağlar.OPENXML bir satır kümesi sağlayıcı olduğundan, OPENXML kullanılabilir Transact-SQL ifadeleri hangi satır kümesi sağlayıcı gibi bir tablo, görünüm veya OPENROWSET işlevini görünebilir.
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )
[ WITH ( SchemaDeclaration | TableName ) ]
Bağımsız değişkenler
idoc
Bir XML belgesinin bir iç gösterim, belge tanıtıcısı mı.Bir XML belgesinin bir iç gösterim çaðýrarak oluşturulur sp_xml_preparedocument.rowpattern
Düğümleri tanımlamak için kullanılan XPath deseni mi (olan tanıtıcı geçirilen XML belgesindeki idoc parametre) satır işlenecek.flags
Indicates the mapping that should be used between the XML data and the relational rowset, and how the spill-over column should be filled.flags is an optional input parameter, and can be one of the following values.Bayt değeri
Açıklama
0
Varsayılan olarak öznitelik merkezli eşleme.
1
Use öznitelik merkezli eşleme.XML_ELEMENTS ile birleştirilebilir.Bu durum, öznitelik merkezli uygulanan ilk ve eşlemesi olanöğe merkezli eşleme henüz ile dağıtılır değil, tüm sütunlar için uygulanır.
2
Use öğe merkezli eşleme.XML_ATTRIBUTES ile birleştirilebilir.Bu durum, öznitelik merkezli uygulanan ilk ve eşlemesi olanöğe merkezli eşleme ile henüz önceleri tüm sütunlar için uygulanır.
8
Olabilir birleştirilmiş (mantıksal VEYA) XML_ATTRIBUTES veya XML_ELEMENTS.Alma bağlamında tüketilen veri taşması özelliğine kopyalanmalıdır değil, bu bayrağın gösterir. @ mp: xmltext.
SchemaDeclaration
Formun şemasını tanýmý gibidir: ColNameColType [ColPattern | MetaProperty] [**,**ColNameColType [ColPattern | MetaProperty]...]ColName
satır kümesi kümesi, sütun adı olur.ColType
Iş SQL Server veri türü sütun satır kümesi içinde. Esas alınan sütun türleri farklı xml veri türü öznitelik, tür zorlama oluşur.ColPattern
Nasıl XML düğümleri sütunlara eşlenmiş olması gereken açıklayan bir isteğe bağlı, genel XPath desen belirtilir.If ColPattern , varsayılan (eşleme belirtilmediöznitelik merkezli or öğe merkezli Belirtilen eşlemeflags) bir yer alır.Belirtilen XPath deseni ColPattern özel yapısı (örneğinde eşlemeyi belirtmek için kullanılır öznitelik merkezli and öğe merkezli eşleştirme) üzerine yazar veya tarafından belirtilen varsayılan eşleme geliştirir.flags.
Genel olarak belirtilen XPath deseni ColPattern Ayrıca, metaproperties destekler.
MetaProperty
OPENXML tarafından sağlanan metaproperties birini belirtilir.If MetaProperty , sütunun tarafından metaproperty sağlanan bilgileri içerip belirtildi. The metaproperties XML düğümleri hakkında bilgiler (örneğin, göreli konum ve ad bilgileri) almanıza olanak sağlar.Bu metin olarak gösterilmesi görünür olandan daha fazla bilgi de sağlar.
TableName
(Yerine verilen tablo adı SchemaDeclaration) istediğiniz şemayı içeren bir tablo zaten var ve yok sütun desenleri gereklidir.
Remarks
WITH yan tümce satır kümesi kümesi biçiminde (ve ek eşleme bilgilerini gerektiği gibi) kullanarak sağlar. SchemaDeclaration veya, varolan belirtme TableName. Isteğe bağlı WITH yan tümce belirtilmezse, sonuçlar döndürülür bir Kenar Çizgili tablo biçimi.Kenar tabloları hassas XML belge yapısı (örneğin, öğe/öznitelik adlarının, belge sıradüzeni, ad, PIs ve son üzerinde) tek bir tablo içinde gösterir.
Aşağıdaki tablo yapısını tanımlayan Kenar Çizgili tablosudur.
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
Kimliği |
bigint |
Belge düğümü kimliktir. Bir KIMLIK değeri 0 kök öğesi var.Negatif teşhis kodu (ID) değerleri rezerve edilir. |
parentID |
bigint |
Üst düğümün tanımlar.Bu KIMLIĞI tarafından tanımlanan ana mutlaka üst öğesi değil, ancak bu KIMLIğI tarafından tanımlanan, üst düğümün NodeType bağlıdırÖrneğin, bir metin düğümü düğümse, bu ana bir öznitelik düğümü olabilir. XML belgesinde, düzey üst düğüm ise, ParentID NULL olur. |
NodeType |
int |
Düğüm türü tanımlar.XML DOM düğümü tipine karşılık gelen bir tamsayı numaralandırma iş. Düğüm türleri şunlardır: 1 Öğe düğümü = 2 Öznitelik düğümü = 3 Metin düğümü = |
LocalName |
nvarchar |
Yerel öğe veya öznitelik adını verir.Iş adı DOM nesnesi yoksa NULL. |
önek |
nvarchar |
Düğüm adı, ad alanı önek'dir. |
namespaceURI |
nvarchar |
Ad alanı URı'düğümünün iş.Değer null (BOş) olduğunda, yok bir ad var. |
veri türü |
nvarchar |
Öğenin gerçek veri türü veya öznitelik, aksi durumda NULL satırdır.Veri türü, satır içi DTD veya satır içi şema değişkenden. |
önceki |
bigint |
XML önceki eşdüzey öğe kimliğidir.Iş doğrudan hiçbir önceki eşdüzey ise NULL. |
text |
ntext |
Öznitelik değerini ya da metin formundaki öğe içeriği içerir (veya NULL ise Kenar Çizgili tablo girişi bir değer gerektirir). |
Örnekler
C.Basit bir deyim ile OPENXML kullanma
Aşağıdaki örnek, iç gösterilişinin XML görüntünün kullanarak oluşturur sp_xml_preparedocument. C SELECT deyim kullanan bir OPENXML satır kümesi sağlayıcı, XML belgesinin bir iç sunumunu karşı sonra yürütülür.
The flag value is küme to 1. Bu gösterir öznitelik merkezli eşleme.Bu nedenle, XML öznitelikleri satır kümesi içindeki sütunları eşleştirebilirsiniz.The rowpattern specified as /ROOT/Customer identifies the <Customers> nodes to be processed.
Isteğe bağlı ColPattern sütun adı ile eşleşen, XML özniteliği adı için (sütun deseni) parametresi belirtilmemiş.
The OPENXML satır kümesi sağlayıcı creates a two-sütun satır kümesi (CustomerID and ContactName) from which the SELECT deyim retrieves the necessary columns (in this durum, all the columns).
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))
Here is the result set.
CustomerID ContactName
---------- --------------------
VINET Paul Henriot
LILAS Carlos Gonzlez
Aynı SELECT deyim ile yürütüldü flags ayarlamak 2, gösteren öğe merkezli eşleme, değerlerini CustomerID ve ContactName müşterilerin, XML belgesindeki her ikisi de null'OLARAK olduğundan döndürülen için <Customers> öğeleri herhangi bir alt öğeleri yoktur.
Here is the result set.
CustomerID ContactName
---------- -----------
NULL NULL
NULL NULL
b.XML öznitelikleri sütunlar arasındaki eşleme ColPattern belirtme
Aşağıdaki sorguyu XML belgesinden, müşteri KIMLIĞI, sipariş tarihini, ürün KIMLIĞI ve miktar özniteliklerini döndürür.The rowpattern identifies the <OrderDetails> elements.ProductID and Quantity are the attributes of the <OrderDetails> element.Ancak, OrderID, CustomerID, ve OrderDate üst öğe (öznitelikler<Orders>).
Isteğe bağlı ColPattern belirtildi.Bu, aşağıdakileri gösterir:
The OrderID, CustomerID, and OrderDate in the satır kümesi map to the attributes of the parent of the nodes identified by rowpattern in the XML document.
The ProdID sütun in the satır kümesi maps to the ProductID öznitelik, and the Qty sütun in the satır kümesi maps to the Quantity öznitelik of the nodes identified in rowpattern.
Ancak öğe merkezli tarafından eşleme belirtildiflags eşlemeyi belirtilen parametre ColPattern Bu eşleştirme üzerine yazar.
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')
Here is the result set.
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.Kenar tablo biçiminde sonuçlarını alma
Aşağıdaki örnek XML belgesi içerir <Customers>, <Orders>, ve <Order_0020_Details> öğeleri. Ilk olarak, sp_xml_preparedocument belge bir tanıtıcı elde etmek için verilir.Bu belge tanıtıcı geçirilir OPENXML.
Içinde OPENXML deyim, rowpattern (/ROOT/Customers) tanımlayan <Customers> işlenecek düğümlerin'ı tıklatın. Çünkü, WITH yan tümce, sağlanmamış OPENXML satır kümesi kümesi döndüren bir Kenar Çizgili tablo biçimi.
Son olarak SELECT tüm sütunlara bildirimi alır Kenar Çizgili tablosudur.
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 that uses the OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customers')
EXEC sp_xml_removedocument @idoc