Aracılığıyla paylaş


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 örnekleri oluşturma

xml veri değişikliği dili (xml dml)

Diğer Kaynaklar

XML veri türü yöntemleri