XQuery Uzantı İşlevleri - sql:variable()

Şunlar için geçerlidir: SQL Server

Bir XQuery ifadesi içinde SQL ilişkisel değeri içeren bir değişkeni ortaya çıkarır.

Syntax

  
sql:variable("variableName") as xdt:anyAtomicType?  

Remarks

Binding Relation Data Within XML başlıklı bölümde açıklandığı gibi, XML veri tipi metodlarını kullanarak XQuery içinde ilişkisel bir değer ortaya çıkardığınızda bu fonksiyonu kullanabilirsiniz.

Örneğin, query() yöntemi , bir xml veri tipi değişkeninde veya sütununda saklanan bir XML örneğine karşı sorgu belirtmek için kullanılır. Bazen, sorgunuz Transact-SQL değişken veya parametreden alınan değerleri kullanarak ilişkisel ve XML verilerini bir araya getirmesini de isteyebilirsiniz. Bunu yapmak için sql:variable fonksiyonunu kullanırsınız.

SQL değeri karşılık gelen bir XQuery değerine eşlenir ve türü ilgili SQL türüne eşdeğer bir XQuery temel türü olur.

Bir xml örneğine yalnızca XML-DML insert ifadesinin kaynak ifadesi bağlamında başvurabilirsiniz; aksi takdirde XML tipine veya ortak dil çalışma zamanı (CLR) kullanıcı tanımlı bir türde değerlere başvuramazsınız.

Examples

A. sql:variable() fonksiyonunu kullanarak Transact-SQL değişken değerini XML'e getirmek

Aşağıdaki örnek, aşağıdakilerden oluşan bir XML örneği oluşturur:

  • XML olmayan bir sütundan bir değer (ProductID) olarak belirtilir. sql:column() fonksiyonu, bu değeri XML'de bağlamak için kullanılır.

  • Başka bir tablodan XML olmayan bir sütundan alınan bir değer (ListPrice). Yine, sql:column() bu değeri XML'de bağlamak için kullanılır.

  • Bir Transact-SQL değişkeninden bir değer (DiscountPrice). Bu yöntem, sql:variable() bu değeri XML'e bağlamak için kullanılır.

  • Sorguyu daha ilginç kılmak için xml tipi bir sütundan bir değer (ProductModelName) verebilirsiniz.

Bu sorgudur:

DECLARE @price money  
  
SET @price=2500.00  
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('  
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
  
       <Product   
           ProductID="{ sql:column("Production.Product.ProductID") }"  
           ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"  
           ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"  
           ListPrice="{ sql:column("Production.Product.ListPrice") }"  
           DiscountPrice="{ sql:variable("@price") }"  
        />')   
FROM Production.Product   
JOIN Production.ProductModel  
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID  
WHERE ProductID=771  

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

  • Metodun query() içindeki XQuery XML'i oluşturur.

  • Bu anahtar kelime, namespaceXQuery Prolog'unda bir namespace preeki tanımlamak için kullanılır. Bu, ProductModelName öznitelik değerinin, kendisine ilişkili bir şema olan tip sütunundan alınması CatalogDescription xml nedeniyle yapılır.

Sonuç şu şekildedir:

<Product ProductID="771" ProductModelID="19"   
         ProductModelName="Mountain 100"   
         ListPrice="3399.99" DiscountPrice="2500" />