Aracılığıyla paylaş


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