SQL:Column() işlev (XQuery)
Konu altında açıklandığı gibi Bağlama ilişkisel veri içinde xml, sen-ebilmek kullanma sql:column(() işlevini kullandığınızda xml veri türü yöntemlerini Ilişkisel değer içinde XQuery duyurmak için.
Örneğin, query() yöntemi (xml veri türü) karşı bir değişken veya sütun depolanan xml örneği sorgu belirtmek için kullanılan xml türü. Bazen de başka değerleri kullanmak için sorgunuzu edebilirsiniz olmayan xml sütun, ilişkisel getirmek ve xml verilerini birlikte. Bunu yapmak için kullandığınız sql:column() işlevi.
sql değeri karşılık gelen bir XQuery değer eşlenen ve kendi türüne karşılık gelen sql türü eşdeğerdir XQuery temel tür olacaktır.
Sözdizimi
sql:column("columnName")
Açıklamalar
Not Bu başvuru için belirtilen bir sütun sql:column() içinde bir XQuery işlevini işlenen satır sütununa başvurur.
De SQL Server, sadece bakabilirsiniz bir xml örneği bağlamında kaynak ifadesi xml dml ekleme deyimini; Aksi takdirde türü olan sütunlar için başvuramaz xml veya kullanıcı tanımlı bir clr türü.
Sql:column() işlev birleşim işlemleri desteklenmiyor. UYGULAMA işlemi yerine kullanılabilir.
Örnekler
A.SQL:Column() Ilişkisel değer xml içinde almak için kullanma
xml oluştururken, aşağıdaki örnekte nasıl xml ve ilişkisel veri bağlamak için olmayan xml ilişkisel sütundan değerleri almak gösterilmiştir.
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" />
<Product ProductID="771" ProductName="Mountain-100 Silver, 38" ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
Yapılandırılmış xml aşağıdakileri unutmayın:
ProductID, ProductName,ve ProductPrice öznitelik değerleri elde den Ürün tablosu.
ProductModelID öznitelik değeri gelen alınır ProductModel tablosu.
Sorgu daha ilginç hale getirmek için ProductModelName öznitelik değeri elde edilir CatalogDescription sütununda xml türü. Çünkü tüm ürün modelleri için xml ürün modeli katalog bilgileri depolanmaz ifdeyimi yalnızca varsa değerini 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 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:
Çünkü iki farklı tablolardan alınan değerler, iki tablo from yan belirtir. where yan tümcesinde koşul sonuç filtreleri ve yalnızca ürün katalog açıklamaları olan ürün modellerinde alır.
Ad anahtar kelime XQuery giriş "pd" sorgu gövdesi içinde kullanılan xml ad alanı önekini tanımlar. Not Tablo diğer adları, "p" ve "pm" sorgunun from yan tümcesinde tanımlanır.
Sql:column() işlevi xml içinde olmayan xml değerleri getirmek için kullanılır.
Bu kısmi bir sonucudur:
ProductID Result
-----------------------------------------------------------------
771 <Product ProductID="771" ProductName="Mountain-100 Silver, 38"
ProductPrice="3399.99" ProductModelID="19"
ProductModelName="Mountain 100" />
...
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ü bilgileri içeren bir xml yapıları. Bu bilgi, ProductID, ProductName, ProductPrice içerir ve varsa ProductModelName tüm ürünler için bu ait belirli bir ürün modeli, ProductModelID = 19. xml sonra @ x değişkenine atanır 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
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.
Başvuru
SQL Server XQuery uzantısı işlevleri
Kavramlar
Yazılı xml yazılmamış xml karşılaştırın
DEL - Implementing XML in SQL Server
xml veri değişikliği dili (xml dml)