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.
XML İçinde İlişkisel Verileri Bağlama konusunda açıklandığı gibi, XQuery içinde ilişkisel bir değeri kullanıma açmak için XML Veri Türü Yöntemlerini kullanırken sql:column(() işlevini kullanabilirsiniz.
Örneğin, query() yöntemi (XML veri türü),xml türünde bir değişkende veya sütunda depolanan bir XML örneğine karşı sorgu belirtmek için kullanılır. Bazen, ilişkisel ve XML verilerini bir araya getirmek için sorgunuzun xml olmayan başka bir sütundaki değerleri kullanmasını da isteyebilirsiniz. Bunu yapmak için sql:column() işlevini kullanırsınız.
SQL değeri karşılık gelen bir XQuery değerine eşlenir ve türü ilgili SQL türüne eşdeğer bir XQuery temel türü olur.
Sözdizimi
sql:column("columnName")
Açıklamalar
XQuery içindeki sql:column() işlevinde belirtilen bir sütuna yapılan başvurunun, işlenen satırdaki bir sütuna başvurduğunu unutmayın.
SQL Server'da bir xml örneğine yalnızca XML-DML insert deyiminin kaynak ifadesi bağlamında başvurabilirsiniz; aksi takdirde , xml veya CLR kullanıcı tanımlı türünde sütunlara başvuramazsınız.
sql:column() işlevi JOIN işlemlerinde desteklenmez. Bunun yerine APPLY işlemi kullanılabilir.
Örnekler
A. XML içindeki ilişkisel değeri almak için sql:column() kullanma
XML oluşturmada, aşağıdaki örnekte XML ve ilişkisel verileri bağlamak için XML olmayan bir ilişkisel sütundan değerleri nasıl alabildiğiniz gösterilmektedir.
Sorgu, aşağıdaki forma sahip XML oluşturur:
<Product ProductID="771" ProductName="Mountain-100 Silver, 38" ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
Oluşturulan XML'de aşağıdakilere dikkat edin:
ProductID, ProductName ve ProductPrice öznitelik değerleri Product tablosundan alınır.
ProductModelID öznitelik değeri ProductModel tablosundan alınır.
Sorguyu daha ilginç hale getirmek için ProductModelName öznitelik değeri xml türündekiCatalogDescription sütunundan alınır. XML ürün modeli katalog bilgileri tüm ürün modelleri için depolanmadığından,
ifdeyimi değeri yalnızca varsa almak için kullanılır.SELECT P.ProductID, CatalogDescription.query(' declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription"; <Product ProductID= "{ sql:column("P.ProductID") }" ProductName= "{ sql:column("P.Name") }" ProductPrice= "{ sql:column("P.ListPrice") }" ProductModelID= "{ sql:column("PM.ProductModelID") }" > { if (not(empty(/pd:ProductDescription))) then attribute ProductModelName { /pd:ProductDescription[1]/@ProductModelName } else () } </Product> ') as Result FROM Production.ProductModel PM, Production.Product P WHERE PM.ProductModelID = P.ProductModelID AND CatalogDescription is not NULL ORDER By PM.ProductModelID
Önceki sorgudan aşağıdakilere dikkat edin:
Değerler iki farklı tablodan alındığından FROM yan tümcesi iki tabloyu belirtir. WHERE yan tümcesindeki koşul sonucu filtreler ve yalnızca ürün modellerinde katalog açıklamaları olan ürünleri alır.
XQuery Prolog'dakinamespace anahtar sözcüğü, sorgu gövdesinde kullanılan "pd" XML ad alanı ön ekini tanımlar. "P" ve "PM" tablo diğer adlarının sorgunun FROM yan tümcesinde tanımlandığını unutmayın.
sql:column() işlevi XML olmayan değerleri XML içine getirmek için kullanılır.
Kısmi sonuç şu şekildedir:
ProductID Result
-----------------------------------------------------------------
771 <Product ProductID="771" ProductName="Mountain-100 Silver, 38"
ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
...
Aşağıdaki sorgu, ürüne özgü bilgiler içeren XML oluşturur. Bu bilgiler, belirli bir ürün modeli olan ProductModelID=19'a ait tüm ürünler için ProductID, ProductName, ProductPrice ve varsa ProductModelName bilgilerini içerir. Xml daha sonra xml türü değişkenine @x atanır.
declare @x xml
SELECT @x = CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductID= "{ sql:column("P.ProductID") }"
ProductName= "{ sql:column("P.Name") }"
ProductPrice= "{ sql:column("P.ListPrice") }"
ProductModelID= "{ sql:column("PM.ProductModelID") }" >
{ if (not(empty(/pd:ProductDescription))) then
attribute ProductModelName { /pd:ProductDescription[1]/@ProductModelName }
else
()
}
</Product>
')
FROM Production.ProductModel PM, Production.Product P
WHERE PM.ProductModelID = P.ProductModelID
And P.ProductModelID = 19
select @x
Ayrıca Bkz.
Türü Yazılan XML'i Yazılmamış XML ile Karşılaştırma
XML Verileri (SQL Server)
XML Verilerinin Örneklerini Oluşturma
xml Veri Türü Yöntemleri
XML Veri Değiştirme Dili (XML DML)