openxml (Transact-SQL)
openxml xml belgesini bir satır kümesi görünüm sağlar.openxml satır kümesi sağlayıcıolduğundan, openxml kullanılabilir Transact-SQL ifadeleri hangi satır kümesi içinde bir tablo, görünüm veya openrowset işlev gibi sağlayıcıları çıkabilir.
Sözdizimi
OPENXML( idoc int [ in] , rowpattern nvarchar [ in ] , [ flags byte [ in ] ] )
[ WITH ( SchemaDeclaration | TableName ) ]
Bağımsız değişkenler
idoc
Bir xml belgenin iç gösterimi, belge tanıtıcı değil.Bir xml belgenin iç gösterimi yaratılır sp_xml_preparedocument.rowpattern
Düğümleri tanımlamak için kullanılan XPath deseni olan (içinde olan tanıtıcı geçirilen xml belgesindeki idoc parametresi) satır var. işlenecekflags
xml verileri ve ilişkisel satır kümesive sütun sıvı dökülmesine üzerinden nasıl doldurulacağını arasında kullanılmalıdır eşleme gösterir.flagsİsteğe bağlı bir giriş parametresidir ve aşağıdaki değerlerden biri olabilir.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 eşleme ilk olarak uygulanan ve sonra öğesi merkezli eşleme henüz ile dağıtılır değil tüm sütunlar için uygulanır.
2
Use öğesi merkezli eşleme.XML_ATTRIBUTES ile birleştirilebilir.Bu durum öznitelik-merkezli eşleme ilk olarak uygulanan ve sonra öğesi merkezli eşleme tüm sütunları henüz çözüldüğünü için uygulanır.
8
Olabilir birleşik (mantıksal or) ile XML_ATTRIBUTES ya da xml_elements.Alma bağlamında, bu bayrak tüketilen veri taşma özellikkopyalanmaması gereken olduğunu gösterir@ mp: xmltext.
SchemaDeclaration
Formu şema tanımı aşağıdaki gibidir: ColNameColType [ColPattern | MetaProperty] [**,**ColNameColType [ColPattern | MetaProperty]...]ColName
satır kümesiiçinde sütun addır.ColType
İş SQL Server satır kümesi sütun veri türünü.sütun türlerini temel alınan farklıysa xml veri türü özniteliktürü zorlama gerçekleşir.ColPattern
Açıklar nasıl xml düğümleri için sütunları eşlenmiş olması gereken bir isteğe bağlı, genel XPath deseni ortaya çıkar.ColPattern Belirtilmezse, varsayılan eşleme (öznitelik-merkezli veya öğesi merkezli tarafından belirtilen eşleme flags) yer alıyorOlarak belirtilen XPath desen ColPattern eşleme özel mahiyetini belirlemek için kullanılır ( durum öznitelik-merkezli ve öğesi merkezli eşleme) üzerine yazar veya tarafından gösterilen varsayılan eşleme geliştirir flags.
Olarak belirtilen genel XPath desen ColPattern de destekler metaproperties.
MetaProperty
Metaproperties openxml tarafından sağlanan biridir.MetaProperty Belirtilen sütun bilgi içermesini sağladığı metaproperty.Metaproperties (göreli konum ve ad alanı bilgileri gibi) bilgileri ayıklamak için xml düğümleri hakkında sağlar.Bu metin olarak gösterilmesi görünür olandan daha fazla bilgi sağlar.
TableName
Verilebilir tablo adı (yerine SchemaDeclaration) istenen şema içeren bir tablo zaten var ve hiçbir sütun desenleri gereklidir.
Açıklamalar
WITH yan tümce kullanarak bir satır kümesi biçiminde (ve ek eşleştirme bilgileri gerektiği gibi) sağlayan SchemaDeclaration veya belirtme varolan bir TableName.İsteğe bağlı WITH yan tümce belirtilmezse, sonuçlar dönen bir Kenar tablo biçimi.Kenar tablo temsil belirtilecek xml belge yapısı (öğesi gibi /öznitelik adları, belge hiyerarşisindeki, ad alanları, PI'ler ve üzerinde son) tek bir tablo.
Aşağıdaki tablo yapısını tanımlayan Kenar tablo.
Sütun adı |
Veri türü |
Açıklama |
---|---|---|
Kimliği |
bigint |
Belge düğümü benzersiz kimliğidir. Kök öğesi kimliği değeri 0 vardır.Negatif kimliği değerleri ayrılmıştır. |
parentID |
bigint |
Düğümün üst tanımlar.Bu kimliği tarafından tanımlanan üst mutlaka üst öğesi değildir, ancak ana bu kimliği tarafından tanımlanan düğüm NodeType bağlıdırÖrneğin, düğüm bir metin düğümü ise, üst öznitelik düğümü olabilir. En üst düzey xml belgesindeki düğümse, parentID null olur. |
NodeType |
int |
Düğüm türü tanımlar.xml dom düğüm türüne karşılık gelen tamsayı numaralandırma. Düğüm türleri şunlardır: 1 = Öğe düğümü 2 = Öznitelik düğümü 3 = Metin düğümü |
LocalName |
nvarchar |
Bir öðe ya da öznitelikyerel adını verir.Olan dom nesnesi bir ad yoksa null. |
önek |
nvarchar |
Düğüm adı ad alanı öneki var. |
namespaceURI |
nvarchar |
Düğümün URI ad alanıdır.Değer null ise, ad alanı bulunuyor. |
Datatype |
nvarchar |
Öğenin gerçek veri türü veya öznitelik satır, aksi halde null.Veri türü, dtd satırla hizalı veya satır içi şema algılanır. |
önceki |
bigint |
Önceki eşdüzey öğesi xml kimliğidir.Olan doğrudan hiçbir önceki Eşdüzey Düğüm yoksa null. |
metin |
ntext |
öznitelik değerini veya metin biçiminde öğe içeriği içerir (veya null ise Kenartablo girdisi bir değer gerektirmez). |
Örnekler
A.Basit bir select deyim openxml ile kullanma
Aşağıdaki örnek bir iç xml görüntünün gösterimini kullanarak oluşturur sp_xml_preparedocument.A SELECTkullanandeyim bir OPENXMLsatır kümesisağlayıcı iç gösterimi karşı yürütülen sonra xml belgesi.
flag Değerdir küme için 1.Bu gösterir öznitelik-merkezli eşleme.Bu nedenle, xml özniteliği satır kümesisütunlarda eşleştirin.rowpattern Belirtildiği gibi /ROOT/Customer tanımlayan <Customers> İşlenecek düğümler.
İsteğe bağlı ColPattern (sütun deseni) parametresi belirtmez olduğundan sütun adı ile eşleşen xml öznitelik adı.
OPENXMLsatır kümesisağlayıcı oluşturur ikisütunsatır kümesi ( CustomerID ve ContactName), SELECTdeyim alır gerekli sütunları (Bu durum, tüm sütunlar).
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))
Sonuç kümesi buradadır.
CustomerID ContactName
---------- --------------------
VINET Paul Henriot
LILAS Carlos Gonzlez
Aynı SELECTiledeyim yürütüldüğünde flagsküme 2, gösteren öğesi merkezli eşleme, değerleri CustomerID ve ContactName Müşteriler xml belgesindeki her ikisi de boş olarak olduğundan döndürülen için <Customers> öğelere sahip tüm alt öğeleri.
Sonuç kümesi buradadır.
CustomerID ContactName
---------- -----------
NULL NULL
NULL NULL
B.Sütunları ve xml öznitelikleri arasında eşleştirme ColPattern belirtme
Aşağıdaki sorgu xml belgesinden müşteri kimliği, sipariş tarih, ürün kimliği ve miktar öznitelikleri döndürür.rowpattern Tanımlayan <OrderDetails> öğeleri.ProductIDve Quantity öznitelikleri olan <OrderDetails> öğesi.Ancak, OrderID, CustomerID, ve OrderDate üst öðenin öznitelikleri (<Orders>).
İsteğe bağlı ColPattern belirtilir.Aşağıdaki gösterir:
OrderID, CustomerID, Ve OrderDate üst düğümler tarafından tanımlanan öznitelikleri için satır kümesi Haritası'nda rowpattern xml belgesi.
ProdID satır kümesisütun eşlemeleri için ProductIDöznitelikve Qty satır kümesisütun eşlemeleri için Quantityöznitelik düğümleri içinde tanımlanan rowpattern.
Rağmen öğesi merkezli tarafından belirtilen eşleme flags parametresi, eşleştirme öğesinde belirtilen ColPattern üzerine yazar bu eşleme.
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')
Sonuç kümesi buradadır.
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 elde etmek
Aşağıdaki örnek xml belgesini oluşan <Customers>, <Orders>, ve <Order_0020_Details> öğeleri.İlk, sp_xml_preparedocument bir belge tanıtıcı elde etmek için verilir.Bu belge tutamacı için geçirilen OPENXML.
De OPENXMLdeyim, rowpattern ()/ROOT/Customers) tanımlayan <Customers> düğümleri için işlem.WITH yan tümce verilmez çünkü OPENXML satır kümesi içinde döndürür bir Kenar tablo biçimi.
Son olarak SELECT deyim alır tüm sütunlarda Kenar tablo.
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