Aracılığıyla paylaş


openxml (SQL Server)

openxml, bir Transact-SQLanahtar kelime, bir tablo veya Görünüm benzer bellek xml belgeleri üzerinde satır kümesi sağlar. Sanki bir ilişkisel satır kümesi openxml xml veri erişimi sağlar. Bunu iç temsili bir xml belgesinin satır kümesi bir görünümünü sağlayarak yapar. Satır kümesi kayıtları veritabanı tablolarında depolanır.

Satır kümesi sağlayıcı, bir görünüm veya openrowset kaynağı olarak görünür yerde openxml seçin ve select INTO deyimlerinde kullanılabilir. openxml sözdizimi hakkında daha fazla bilgi için bkz: openxml (Transact-sql).

openxml kullanarak xml belgesinin sorgular yazmak için öncelikle bir çağırmalısınız sp_xml_preparedocument. Bu xml belgesi ayrıştırma ve tüketim için hazır olan çözümlenen belgenin bir tanıtıcı döndürür. Çeşitli düğümleri xml belgesinde bir belge nesnesi modeli (dom) ağaç temsili ayrıştırılmış belgedir. openxml için belge ele geçirildi. openxml sonra kendisine iletilen parametrelere dayalı belge satır kümesi bir görünümünü sağlar.

[!NOT]

İle başlayan SQL Server 2005, sp_xml_preparedocument msxml ayrıştırıcısı, Msxmlsql.dll sql güncelleştirilmiş bir sürümünü kullanır. Bu msxml ayrıştırıcısı sürümü desteklemek için tasarlanmıştır SQL Serverve geriye dönük uyumluluk msxml sürüm 2.6 kalır.

xml belgesinin iç gösterimi çağırarak bellekten kaldırılmalıdır sp_xml_removedocument sistem saklı yordamı belleği boşaltmak için.

İşlem aşağıda gösterilmiştir.

OPENXML ile XML ayrıştırma

openxml anlamak için XPath sorguları ve xml anlayışı ile aşinalık gerekli olduğunu unutmayın. XPath desteği SQL Server hakkında daha fazla bilgi için bkz: XPath sorguları sqlxml 4.0 kullanma.

[!NOT]

OpenXML XPath desenler değişkenleri Parametreli satır ve sütununu verir. Eğer varsa (örneğin, parametreler ile dışarıdan çağrılan bir saklı yordam sağlanır) programcı PARAMETERIZATION dış kullanıcılara sunar gibi PARAMETERIZATION XPath ifadesi enjeksiyonu için yol açabilir. Bu tür olası güvenlik sorunlarını önlemek için XPath parametreleri asla dış arayanlara maruz önerilir.

Örnek

Aşağıdaki örnek kullanımını gösterir OPENXMLde bir INSERTdeyimi ve bir SELECTdeyimi. Örnek xml belgesi içeren <Customers>ve <Orders>elemanları.

İlk, sp_xml_preparedocumentsaklı yordam xml belgeyi çözümler. Çözümlenen belgenin xml belgesindeki düğümleri (öğeleri, öznitelikleri, metin ve yorumlar) bir ağaç gösterimidir. OPENXMLdaha sonra bu ayrıştırılmış xml belgesi için başvuran ve tüm veya parça bu xml belgenin satır kümesi görüntüleme sağlar. Bir INSERTdeyimini kullanarak OPENXMLveri veritabanı tablo gibi bir satır ekleyebilirsiniz. Birkaç OPENXMLaramalar, xml belgesinin çeşitli bölümlerini satır kümesi bir görünümünü sağlar ve bunları örneğin farklı tabloların içine ekleyerek işlemek için kullanılabilir. Bu işlem da xml tablolarına parçalama olarak adlandırılır.

Aşağıdaki örnekte, xml belgesinin bir şekilde parçalanmış, <Customers>öğeleri depolanmış olan Customerstablo ve <Orders>öğeler saklanır Ordersiki kullanarak tablo INSERTdeyimleri. Ayrıca örnek bir SELECTdeyimi ile OPENXMLo alır CustomerIDve OrderDatexml belgesindeki. Arama işleminde son adım olan sp_xml_removedocument. Bu ayrıştırma aşamasında oluşturulan iç xml ağacını temsili içerecek şekilde ayrılan bellek serbest bırakmak için yapılır.

-- 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 

Aşağıdaki resimde kullanılarak oluşturulmuş önceki xml belgesinin ayrıştırılmış xml ağacını gösterir sp_xml_preparedocument.

Ayrıştırılmış XML ağacı

openxml Parametreler

openxml Parametreler şunlardır:

  • Bir xml belge tutamacı (IDoc)

  • Satır için eşlenen düğümleri tanımlamak için bir XPath ifadesi (rowpattern)

  • Oluşturulacak satır kümesi açıklaması

  • Satır kümesi sütunları ve xml düğümleri arasında eşleme

xml belge tanıtıcı (idoc)

Belge tanıtıcı tarafından döndürülen sp_xml_preparedocument saklı yordamı.

XPath ifadesini (rowpattern) işleme düğümleri tanımlamak için

Belirtilen XPath ifadesini rowpattern , bir xml belgesindeki düğüm kümesi tanımlar. Tarafından tanımlanan her düğüm rowpattern openxml tarafından oluşturulan satır kümesi tek bir satıra karşılık gelir.

XPath deyimi tarafından tanımlanan düğüm, xml belgesinde herhangi bir xml düğümü olabilir. Eğer rowpattern kümesi tanımlayan xml belgesi içindeki öğeleri, orada bir satır satır kümesi için tanımlanan her öğe düğümü. Örneğin, eğer rowpattern özniteliği biter, bir satır için seçtiği her öznitelik düğümü oluşturulur rowpattern.

Oluşturulacak satır kümesi açıklaması

Bir satır kümesi şema openxml tarafından elde edilen satır kümesi oluşturmak için kullanılır. Bir satır kümesi şema belirtirken aşağıdaki seçenekleri kullanabilirsiniz.

Kenar Tablo biçimi kullanma

Bir satır kümesi şema belirtmek için kenar tablo biçimini kullanmalısınız. Yan kullanmayın.

Bunu yaptığınızda, openxml kenar tablo biçiminde bir satır kümesi döndürür. Ayrıştırılmış xml belge ağacındaki her köşede bir satır satır kümesi eşleştirir çünkü bu bir kenar tablo olarak adlandırılır.

Kenar Tablo ayrıntılı xml belge yapısı içinde tek bir tabloyu temsil eder. Bu yapıyı, öğe ve öznitelik adları, belge hiyerarşisi, ad alanlarını ve işleme yönergeleri içerir. Kenar tablo biçiminde metaproperties maruz kalmaz ek bilgi sağlar. Metaproperties hakkında daha fazla bilgi için bkz: OPENXML29bfd1c6-3f9a-43 c 4-924a-53d438e442f4 Metaproperties belirtme.

Kenar Tablo tarafından sağlanan ek bilgileri depolamak ve sorgu bir öğe ve öznitelik veri türü ve düğüm türü depolamak ve sorgu xml belge yapısı hakkında bilgi sağlar. Bu ek bilgilerle, o da kendi xml belge yönetim sistemi inşa etmek mümkün olabilir.

Kenar Tablo kullanarak, xml belgeleri giriş, ikili büyük nesne (blob) alır saklı yordamlar kenar tablo oluşturmak ayıklayın ve belge üzerinde daha ayrıntılı bir düzeyde analiz yazabilirsiniz. Bu ayrıntılı düzeyde belge hiyerarşisi, öğe ve öznitelik adları, ad alanlarını ve işleme yönergeleri bulma içerebilir.

Kenar tablo da depolama biçimi için xml belgeleri olarak ilişkisel diğer biçimleri eşleme mantıksal değil ve bir ntext alan yapısal yeterli bilgi sağlamıyor hizmet edebilir.

Nerede xml belgesini incelemek için bir xml Ayrıştırıcısı kullanabilirsiniz durumlarda, bunun bir kenar tablo yerine aynı bilgileri almak için kullanabilirsiniz.

Aşağıdaki tabloda, kenar tablonun yapısını açıklar.

Sütun adı

Veri türü

Açıklama

ID

bigint

Belge düğümü benzersiz kimliğidir.

Kök öğe, bir kimlik değeri 0 vardır. Negatif Kimliği değerleri aittir.

ParentID

bigint

Düğümün üst tanımlar. Bu kimliği tarafından belirtilen üst mutlaka üst öğe değil. Ancak, bu NodeType olan üst bu kimliği tarafından tanımlanan düğüm bağlıdır Örneğin, düğüm bir metin düğümü ise, üst öznitelik düğümü olabilir.

xml belgesinde seviyesi üst düğümse, ParentID null olur.

düğüm türü

int

Düğüm türü tanımlar ve xml nesnesi modeli (dom) düğüm türü numaralama için karşılık gelen bir tamsayıdır.

Düğüm türü belirtmek için bu sütunda görüntülenen değerleri şunlardır:

1 = Eleman düğümü

2 = Öznitelik düğümü

3 = Metin düğümü

4 = cdata bölümü düğüm

5 = Varlık başvuru düğüm

6 = Varlık düğüm

7 = Işleme yönergesi düğüm

8 = Açıklama düğüm

9 = Belge düğümü

10 = Belge türü düğümü

11 = Belge parçası düğümü

12 = Gösterim düğümü

Daha fazla bilgi için bkz: "nodeType özelliği" konu Microsoft xml (msxml) sdk.

İsim

nvarchar(max)

Öğe ya da özniteliğin yerel adını verir. 'S dom nesnesi bir ad yoksa null.

önek

nvarchar(max)

Düğüm adı ad alanı öneki var.

uri

nvarchar(max)

Ad alanı URI düğüm. Ad değeri boş ise, yok.

veri türü

nvarchar(max)

Öğe veya öznitelik satır gerçek veri türü ve aksi halde null. Veri türü satır içi dtd veya satır içi şema olayla.

prev

bigint

Önceki eşdüzey öğesi xml kimliğidir. Olan hiçbir doğrudan önceki eşdüzey ise null.

metin

ntext

Öznitelik değerini veya metin biçiminde öğe içeriği içeriyor. Veya null ise Kenar Tablo girişi bir değer gerektirmez.

Kullanarak varolan bir tabloyu belirtmek için yan tümcesi ile

Yan, varolan bir tablonun adını belirtmek için kullanabilirsiniz. Bunu yapmak için sadece olan şema satır kümesi oluşturmak için openxml tarafından kullanılabilir varolan bir tablonun adını belirtin.

Kullanarak bir şema belirtmek için yan tümcesi ile

Sen-ebilmek kullanma ile tam bir şema belirtmek için yan tümcesi. Satır kümesi şeması belirtme içinde sütun adları, kendi veri türleri ve onların eşlemesine xml belgesini belirtin.

Sütun deseni, SchemaDeclaration ColPattern parametresini kullanarak belirtebilirsiniz. Belirtilen sütun deseni rowpattern tarafından tanımlanır ve aynı zamanda eşleme türünü belirlemek için kullanılan xml düğümü için bir satır kümesi sütun eşlemek için kullanılır.

ColPattern için bir sütun belirtilmezse, satır kümesi sütun xml düğümü tarafından belirtilen eşleme göre aynı adla eşler flagsparametresi. Ancak o yazar belirtilen eşleştirme ColPattern yan şema özellikleri bir parçası olarak belirtilirse, flagsparametresi.

Satır kümesi sütunları ve xml düğümleri arasında eşleme

openxml deyimi içinde isteğe bağlı özniteliği merkezli ya da öğe merkezli, satır kümesi sütunları ve tarafından tanımlanan xml düğümleri arasında eşleme türünü belirleyebileceğiniz rowpattern. Bu bilgiler, satır kümesi sütunları ve xml düğümleri arasında dönüşüm kullanılır.

İki yolla eşleme belirtebilir ve hem de belirtebilirsiniz:

  • Kullanarak bayrakları parametresi

    Tarafından belirtilen eşleme bayrakları parametresi olan xml düğümleri eşlemek için karşılık gelen satır kümesi sütun aynı ada sahip adı yazışma varsayar.

  • Kullanarak ColPattern parametresi

    ColPattern, bir XPath deyimi bir parçası olarak belirtilen SchemaDeclaration WITH yan tümcesi. Belirtilen eşleme ColPattern tarafından belirtilen Eşleme üzerine yazar bayrakları parametresi.

    ColPattern üzerine yazar veya tarafından gösterilen varsayılan eşleme geliştirir öznitelik merkezli ya da öğe merkezli eşleme türünü belirtmek için kullanılan bayrakları.

    ColPattern şu koşullarda belirtilir:

    • Satır kümesi sütun adı için eşlendiği öğe ya da öznitelik adından farklı. Bu durumda, ColPattern xml öğe ve öznitelik adı için satır kümesi sütun eşlemeleri tanımlamak için kullanılır.

    • Metaproperty özniteliği sütun eşlemek istediğiniz. Bu durumda, ColPattern için satır kümesi sütun eşlemeleri metaproperty tanımlamak için kullanılır. Metaproperties kullanma hakkında daha fazla bilgi için bkz: Metaproperties openxml belirtin.

Her iki bayrakları ve ColPattern parametreler isteğe bağlıdır. Eşleme yok belirtilirse, öznitelik merkezli eşleme varsayılır. Öznitelik merkezli eşleme olarak varsayılan değer bayrakları parametresi.

Öznitelik merkezli eşleme

Ayar bayrakları openxml parametre 1 (XML_ATTRIBUTES) belirtir özniteliği merkezli eşleme. Eğer bayrakları xml_ ÖZNİTELİKLERİ içeren maruz satır kümesi sağlar veya her bir xml öğesi satır temsil nerede satırları tüketir. xml öznitelikleri öznitelikleri, SchemaDeclaration içinde tanımlı olan ya da bu adı yazışmalar alarak yan, Tablename tarafından sağlanan eşlenir. Adı yazışma, belirli bir ad xml öznitelikleri satır kümesi aynı isimde bir sütunda depolanan anlamına gelir.

Sütun adı için eşleştirir öznitelik adı farklı ise ColPattern belirtilmelidir.

Bir ad alanı niteleyicisi xml özniteliği varsa, satır kümesi sütun adı da niteleyicisi olmalıdır.

Öğe merkezli eşleme

Ayar bayrakları openxml parametre 2 (xml_elements) belirtir öğesi merkezli eşleme. Benzer özniteliği merkezli , aşağıdaki farklar dışında eşleme:

  • Sütun düzeyinde desen belirtilmediği sürece eşleme örneği adı yazışma, aynı ada sahip bir xml öğesi için bir sütun eşleme noncomplex alt öğeleri seçer. Ek alt öğeler içerdiğinden alt öğesi karmaşık ise alma işleminde sütun null olarak ayarlanır. Öznitelik değerleri alt sonra yoksayılır.

  • Aynı ada sahip birden çok alt için ilk düğümü döndürülür.

Ayrıca bkz.

Başvuru

sp_xml_preparedocument (Transact-sql)

sp_xml_removedocument (Transact-sql)

openxml (Transact-sql)

DEL - Use FOR XML and OPENXML to Publish and Process XML Data

Kavramlar

DEL - Implementing XML in SQL Server

Sample XML Applications and Data