Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
OPENXML bir XML belgesi üzerinde bir sıra kümesi görünümü sağlar. Çünkü OPENXML bir satır kümesi sağlayıcısıdır, OPENXML tablo, görünüm veya OPENROWSET fonksiyon gibi satır kümesi sağlayıcılarının görünebileceği Transact-SQL ifadelerinde kullanılabilir.
Transact-SQL söz dizimi kuralları
Sözdizimi
OPENXML ( idoc int [ in ]
, rowpattern nvarchar [ in ]
, [ flags byte [ in ] ] )
[ WITH ( SchemaDeclaration | TableName ) ]
Arguments
IDOC
Bir XML belgesinin iç temsilinin belge tutamacı. Bir XML belgesinin iç temsili .sp_xml_preparedocument
rowpattern
XPath deseni, işlenecek düğümleri satır olarak tanımlamak için kullanılır. Düğümler, idoc parametresinde kullanılan XML belgesinden gelir.
flags
XML veri ile ilişkisel satır kümesi arasındaki eşlemeyi ve splay-over sütununun nasıl doldurulduğunu gösterir. bayraklar isteğe bağlı bir giriş parametresidir ve aşağıdaki değerlerden biri olabilir.
| Bayt değeri | Description |
|---|---|
0 |
Varsayılan olarak haritalamaya attribute-centric geçiyor. |
1 |
Haritalamayı attribute-centric kullanın. ile XML_ELEMENTSbirleştirilebilir. Bu durumda attribute-centric önce eşleme uygulanır. Sonra, element-centric kalan sütunlar için eşleme uygulanır. |
2 |
Haritalamayı element-centric kullanın. ile XML_ATTRIBUTESbirleştirilebilir. Bu durumda element-centric önce eşleme uygulanır. Sonra, attribute-centric kalan sütunlar için eşleme uygulanır. |
8 |
Birleştirilebilir (mantıklı VEYA veya XML_ATTRIBUTES veya XML_ELEMENTSile ). Alma bağlamında, bu bayrak tüketilen verinin taşma özelliğine @mp:xmltextkopyalanmaması gerektiğini gösterir. |
Şema Deklarasyonu
Formun şema tanımı: ColNameColType [ ColPattern | MetaProperty ] [ , ColNameColType [ ColPattern | MetaProperty ] ... ]
ColName
Satır kümesindeki sütun adı.
ColType
Sıralı kümedeki sütunun SQL Server veri tipi. Eğer sütun tipleri, özniteliğin altta yatan xml veri tipinden farklıysa, tür zorlayıcılığı gerçekleşir.
ColPattern
XML düğümlerinin sütunlara nasıl eşleneceğini açıklayan isteğe bağlı, genel bir XPath desenidir. Eğer ColPattern belirtilmemişse, varsayılan eşleme (
attribute-centricveyaelement-centricbayraklarla belirtilen eşleme) gerçekleşir.ColPattern olarak belirtilen XPath deseni, bayraklarla belirtilen varsayılan eşlemenin üzerine yazan veya geliştiren özel eşlemenin (ve
attribute-centricelement-centriceşleme) özel doğasını belirtmek için kullanılır.ColPattern olarak belirtilen genel XPath deseni de meta özellikleri destekler.
MetaProperty
Tarafından
OPENXMLsağlanan meta özelliklerden biri. MetaProperty belirtilmişse, sütun metaproperty tarafından sağlanan bilgileri içerir. Meta özellikler, XML düğümleri hakkında bilgi (örneğin göreceli konum ve isim alanı bilgisi) çıkarmanıza olanak tanır. Bu meta özellikler, metin temsilinde görünenden daha fazla bilgi sağlar.
Tablo Adı
İstenilen şemaya sahip bir tablo zaten varsa ve sütun desenleri gerekmiyorsa ( SchemaDeclaration yerine) verilebilecek tablo adı.
Açıklamalar
Bu madde, WITHSchemaDeclaration kullanılarak veya mevcut bir TabloName belirterek bir satır kümesi formatı (ve gerektiğinde ek eşleme bilgisi) sağlar. Isteğe WITH bağlı madde belirtilmemişse, sonuçlar kenar tablosu formatında döner. Kenar tablolar, ince tanenli XML belge yapısını (eleman/öznitelik adları, belge hiyerarşisi, isim alanları, PI'ler vb.) tek bir tabloda temsil eder.
Aşağıdaki tablo, kenar tablosunun yapısını açıklar.
| Sütun adı | Veri türü | Description |
|---|---|---|
id |
bigint | Belge düğümünün benzersiz kimliği. Kök elemanın bir ID değeri 0vardır. Negatif kimlik değerleri ayrılmıştır. |
parentid |
bigint | Düğümün üst öğesini tanımlar. Bu ID ile tanımlanan ebeveyn mutlaka ebeveyn eleman değildir, ancak bu kimlik ile tanımlanan ebeveyn düğümün ana öğesine bağlıdır nodetype . Örneğin, düğüm bir metin düğümü ise, onun ebeveyni bir nitelik düğümü olabilir.Eğer düğüm XML belgesinde en üst seviyedeyse, ParentIDNULL'dir. |
nodetype |
int | Düğüm tipini belirler. Bu değer, XML DOM düğüm tipi numaralandırmasına karşılık gelen bir tam sayıdır. Düğüm türleri şunlardır:1 = Element düğümü2 = Öznitelik düğümü3 = Metin düğümü |
localname |
nvarchar | Öğenin veya özniteliğin yerel adını verir.
NULL DOM nesnesinin adı yoksa. |
prefix |
nvarchar | Düğüm adının isim alanı öneki. |
namespaceuri |
nvarchar | Düğümün isim alanı URI'si. Değer ise NULL, bir isim alanı yoktur. |
data type |
nvarchar | Öğenin veya öznitelik satırının gerçek veri türü, aksi takdirde 'dir.NULL Veri türü satır içi DTD'den veya satır içi şemadan çıkarılır. |
prev |
bigint | Önceki kardeş öğenin XML ID'si.
NULL doğrudan önceki kardeş yoksa. |
text |
ntext | Özellik değerini veya öğe içeriğini metin formunda içerir (veya kenar tablo girişi değer gerektirmiyorsa).NULL |
Örnekler
A. OPENXML ile temel bir SELECT ifadesi kullanın
Aşağıdaki örnek, XML görüntüsünün iç bir temsilini oluşturur.sp_xml_preparedocument Bir OPENXML sıra kümesi sağlayıcısı kullanan bir SELECT ifade, XML belgesinin iç temsiline karşı yürütülür.
Bayrak değeri olarak ayarlanmıştır1. Bu değer eşlemeyi gösterir attribute-centric . Bu nedenle, XML öznitelikleri satır kümesindeki sütunlara eşlenir. Belirtilen /ROOT/Customer<Customers>sıralı desen, işlenilecek düğümleri tanımlar.
Isteğe bağlı ColPattern (sütun deseni) parametresi belirtilmez çünkü sütun adı XML öznitelik adlarıyla eşleşir.
Satır kümesi sağlayıcısı OPENXML , ifadenin gerekli sütunları (bu durumda tüm sütunları) aldığı iki sütunlu bir satır kümesi (CustomerID ve ContactName) SELECT oluşturur.
DECLARE @idoc INT, @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 aşağıdadır.
CustomerID ContactName
---------- --------------------
VINET Paul Henriot
LILAS Carlos Gonzlez
Aynı SELECT ifade , eşlemeyi gösteren 2element-centricbayraklar ayarlanmış olarak çalıştırılırsa, XML belgesinde NULLher iki müşterinin ve ContactName değerlerinin CustomerID değerleri , çünkü XML belgesinde herhangi bir öğe yoktur CustomerIDContactName.
Sonuç kümesi aşağıdadır.
CustomerID ContactName
---------- -----------
NULL NULL
NULL NULL
B. Sütunlar ile XML öznitelikleri arasındaki eşleme için ColPattern belirtin
Aşağıdaki sorgu, XML belgesinden müşteri kimliği, sipariş tarihi, ürün kimliği ve miktar özelliklerini geri getirir.
Sıra deseni elementleri <OrderDetails> tanımlar.
ProductID ve Quantity elementin özellikleridir <OrderDetails> . Ancak, OrderID, , ve OrderDate ana elemanın (<Orders>) öznitelikleridirCustomerID.
Opsiyonel ColPattern aşağıdaki eşlemeler için belirtilmiştir:
OrderIDSıra kümesindeki ,CustomerID, veOrderDateXML belgesinde sıralı desen ile tanımlanan düğümlerin ebeveyn özelliklerine eşlenir.Satır kümesindeki sütun
ProdIDözniteliğeProductIDeşlenirken,Qtysatır kümesindeki sütun ise sıralı desende tanımlanan düğümlerin özniteliğine eşlenirQuantity.
Eşleme, element-centricbayrak parametresi tarafından belirlenmiş olsa da, ColPattern'ta belirtilen eşleme bu eşlemenin üzerine yazılır.
DECLARE @idoc INT, @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">v
<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 aşağıdadı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. Sonuçları kenar tablosu formatında elde edin
Aşağıdaki örnekteki örnek XML belgesi , <Orders>, ve <Order_0020_Details> elemanlardan <Customers>oluşur. Birincisi, sp_xml_preparedocument bir belge handle almak için çağrılır. Bu belge hesabı 'ye OPENXMLgeçirilir.
Bu ifadede OPENXML , sıralı desen (/ROOT/Customers) işlenecek düğümleri tanımlar <Customers> . Kümlek WITH sağlanmadığı için, OPENXML satır kümesi kenar tablo formatında döndürülür.
Son olarak, ifade SELECTkenar tablosundaki tüm sütunları geri alır.
DECLARE @idoc INT, @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;