Aracılığıyla paylaş


SQL:sütun() işlev (XQuery)

Bu konuda, açıklandığı gibi Iç XML ilişkisel veri bağlama kullanabilirsiniz.SQL:sütun(() kullandığınızda işlevXML veri türü yöntemleri XQuery ilişkisel bir değer göstermek için.

Örneğin, Query() yöntem (XML veri türü) yönelik bir değişken veya sütun içinde depolanan bir XML örnek bir sorgu belirtmek için kullanılırXML türü.Bazı durumlarda sorgunuz, değerleri kullanmak da isteyebilirsiniz olmayan XML sütun, ilişkisel getirmeyi ve XML verilerini birlikte.Bunu yapmak için , kullandığınız SQL:sütun() işlev.

SQL değeri karşılık gelen XQuery değerine eşleştirilir ve türünü, karşılık gelen SQL tipine eşdeğerdir XQuery temel tür olacaktır.

sql:column("columnName")

Remarks

Belirtilen bir sütun başvurusu, Not SQL:Column() işlev içindeki bir XQuery işlenmekte satırda bir sütuna başvuruyor.

Içinde SQL Server, yalnızca başvurabilirsiniz bir XML örnek içeriğinde XML DML kaynak ifade ifade ekleyin; aksi halde türü olan sütunlar başvuramaz.XML veya CLR kullanıcı tanımlı türü.

The sql:sütun() işlev is not supported in birleştirmek operations.APPLY işlemi yerine kullanılabilir.

Örnekler

C.SQL:sütun() XML içinde ilişkisel değerini almak için kullanma

XML oluştururken, XML ve ilişkisel veri bağlamak için olmayan XML ilişkisel sütundan değerleri nasıl alabilir, aşağıdaki örnekte 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" />

Oluşturulan XML aşağıdakilere dikkat edin:

  • The ProductID, ProductName,and ProductPrice attribute values are obtained from the Product table.

  • The ProductModelID öznitelik value is retrieved from the ProductModel tablo.

  • Sorguyu daha ilginç hale getirmek için ProductModelName öznitelik değeri elde edilirCatalogDescription sütun XML türü.Tüm ürün modellerini için ürün modeli XML katalog bilgileri depolandığı için if Deyim, 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
    

Önceki sorgudan aşağıdakilere dikkat edin:

  • FROM yan tümce, iki farklı tablolardan alınan değerler için iki tabloyu belirtir.WHERE koşulunda yan tümce sonucu süzer ve yalnızca ürün kataloğunu açıklamaları, ürün modellerinin sahip alır.

  • The namespace keyword in the XQuery Prolog defines the XML namespace prefix, "pd", that is used in the query body.Diğer tablo adları, "P" ve "PM" sorgunun FROM yan tümcesinde tanımlanan unutmayın.

  • The sql:sütun() işlev is used to bring non-XML values inside XML.

Bu kısmi kaynaklanır:

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 bir XML oluşturur.Bu bilgiler, Productıd, ÜrünAdı, ProductPrice içerir ve, varsa, tüm ürünler için ProductModelName, ait belirli bir ürün modeline, Productmodelıd 19 =.XML, daha 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