Udostępnij za pośrednictwem


SQL:variable() funkcji (XQuery)

Opisuje zmienna, która zawiera wartość relacyjnej SQL wewnątrz wyrażenie XQuery.

Składnia

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

Uwagi

Jak opisano w temacie Wiążące relacyjnymi bazami danych wewnątrz XML, można użyć tej funkcja, korzystając z metod typu danych XML do udostępnienia relacyjnej wartość wewnątrz XQuery.

Na przykład query() metoda jest używana do określenia zapytanie XML wystąpienie jest przechowywana w xml Typ danych zmiennej lub kolumna.Czasami może być również kwerendy, aby użyć wartości z Transact-SQL zmiennej lub parametru do relacyjnych i dane XML razem.Aby to zrobić, użyj sql:variable funkcja.

Wartość SQL będą mapowane do odpowiedniej wartości XQuery i jego typ będzie typ bazowy XQuery jest równoważne odpowiedni typ SQL.

Tylko może odnosić się do xml instancji w kontekście wyrażenia źródło XML LŚD insert instrukcja; w przeciwnym razie nie można odwołać się do wartości typu xml lub common language runtime (CLR) typ zdefiniowany przez użytkownika.

Przykłady

A.Przy użyciu funkcja sql:variable() do wprowadzenia wartości zmiennej języka Transact-SQL w XML

Poniższy przykład tworzy XML wystąpienie , składający się z następujących czynności:

  • Wartość (ProductID) z kolumna XML inny niż.Sql:kolumna() funkcja jest używana do powiązania tej wartości w pliku XML.

  • Wartość (ListPrice) z kolumna XML programu z innej tabela.Ponownie sql:column() jest używana do powiązania tej wartości w pliku XML.

  • Wartość (DiscountPrice) z Transact-SQL zmiennej.sql:variable() metoda bind tej wartości do pliku XML.

  • Wartość (ProductModelName) z xml Typ kolumna, aby kwerenda bardziej interesujące.

To jest kwerenda:

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

Poniższe z poprzedniej kwerendy:

  • XQuery wewnątrz query() metoda konstrukcji XML.

  • namespace Słowo kluczowe jest używany do definiowania prefiks obszaru nazw w XQuery prologu.To zrobić, ponieważ ProductModelName wartość atrybut jest pobierana z CatalogDescription xml Typ kolumna, posiada schematu skojarzone go

Jest to wynikiem:

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