SQL:sütun() işlev (XQuery)
Konu altında açıklandığı gibi Bağlama ilişkisel veri içinde xml, kullanabileceğiniz sql:sütun(() işlev kullandığınızda xml veri türü yöntemlerini XQuery içindeki ilişkisel bir değeri göstermek için.
Örneğin, query() yöntem (xml veri türü) karşı bir xml sorgu belirtmek için kullanılan örnek bir değişken veya sütun depolanan xml türü.Bazen de başka değerleri kullanmak için sorgunuza isteyebilirsiniz-xml sütun, ilişkisel getirilecek ve xml verilerini birlikte.Bunu yapmak için kullandığınız sql:sütun() işlev.
sql değeri karşılık gelen bir XQuery değerine eşleştirilir ve kendi türüne karşılık gelen sql türü için eşdeğer bir XQuery temel tür olacaktır.
Sözdizimi
sql:column("columnName")
Açıklamalar
Unutmayın, belirtilen bir sütun başvurusu sql:column() işlev içine bir XQuery işlenen satır sütununa başvurur.
De SQL Server, sadece başvuruda bulunabilir bir xml , xml dml ekleme deyimini; kaynak deyim bağlamında örnek Aksi takdirde türü olan sütunlar için başvuramaz xml veya bir CLR kullanıcı tanımlı tür.
The sql:column() function is not supported in JOIN operations.Bunun yerine uygulama işlemi kullanılabilir.
Örnekler
A.SQL:sütun() içinde xml İlişkisel değer almak için kullanma
Aşağıdaki örnekte, bir olmayan-XML'den ilişkisel değerleri nasıl alabileceğiniz gösterilmektedir xml oluştururken, sütun xml ve İlişkisel veri bağlamak için.
Sorguyu aşağıdaki biçime sahiptir xml oluşturur:
<Product ProductID="771" ProductName="Mountain-100 Silver, 38" ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
Oluşturulan XML aşağıdakilere dikkat edin:
The ProductID, ProductName,and ProductPrice attribute values are obtained from the Product table.
The ProductModelID attribute value is retrieved from the ProductModel table.
Sorgu daha ilginç hale getirmek için ProductModelName öznitelik değeri elde CatalogDescription sütun , xml türü.Tüm Ürün modellerinde için xml ürün modeli katalog bilgileri saklanmadığı için if yalnızca varsa değerini almak için kullanılan deyim.
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:
İki farklı tablolardan alınan değerler olduğundan, iki tablo from yan tümce tümce belirtir.where yan tümce tümce tümcesinde koşul sonucu süzer ve Ürün modelleri, katalog açıklamaları sahip ürünleri alır.
The namespace keyword in the XQuery Prolog defines the XML namespace prefix, "pd", that is used in the query body.Dikkat edin "p" Tablo diğer adları ve "pm" sorgunun from yan tümce tümce tümcesinde tanımlanan.
The sql:column() function is used to bring non-XML values inside XML.
Bu kısmi bir sonucudur:
ProductID Result
-----------------------------------------------------------------
771 <Product ProductID="771" ProductName="Mountain-100 Silver, 38"
ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
...
Ürüne özgü bilgileri içeren xml aşağıdaki sorgu oluşturur.Bu bilgiler, ProductID, ProductName, ProductPrice içerir ve, varsa, tüm ürünler için ProductModelName, ait belirli bir ürün modeline, ProductModelID = 19.xml sonra @ x değişkenine atanan xml tü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.