Delen via


XQuery-extensiefuncties - sql:variable()

van toepassing op:SQL Server-

Geeft een variabele weer die een relationele SQL-waarde in een XQuery-expressie bevat.

Syntaxis

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

Opmerkingen

Zoals beschreven in het onderwerp Relationele gegevens binden in XML-, kunt u deze functie gebruiken wanneer u XML-gegevenstypemethoden gebruikt om een relationele waarde beschikbaar te maken in XQuery.

De methode query() wordt bijvoorbeeld gebruikt om een query op te geven op basis van een XML-exemplaar dat is opgeslagen in een xml- gegevenstypevariabele of -kolom. Soms wilt u ook dat uw query waarden uit een Transact-SQL variabele of parameter gebruikt om relationele en XML-gegevens samen te brengen. Hiervoor gebruikt u de functie sql:variable.

De SQL-waarde wordt toegewezen aan een overeenkomende XQuery-waarde en het bijbehorende type is een XQuery-basistype dat gelijk is aan het bijbehorende SQL-type.

U kunt alleen verwijzen naar een xml- exemplaar in de context van de bronexpressie van een XML-DML invoeginstructie; anders kunt u niet verwijzen naar waarden die van het type xml- of een door de gebruiker gedefinieerd type common language runtime (CLR) zijn.

Voorbeelden

Een. De functie sql:variable() gebruiken om een Transact-SQL variabele waarde in XML te zetten

In het volgende voorbeeld wordt een XML-exemplaar samengesteld dat bestaat uit het volgende:

  • Een waarde (ProductID) uit een niet-XML-kolom. De functie sql:column() wordt gebruikt om deze waarde in de XML te binden.

  • Een waarde (ListPrice) uit een niet-XML-kolom uit een andere tabel. Opnieuw wordt sql:column() gebruikt om deze waarde in de XML te binden.

  • Een waarde (DiscountPrice) van een Transact-SQL variabele. De methode sql:variable() wordt gebruikt om deze waarde te binden aan de XML.

  • Een waarde (ProductModelName) van een xml- typekolom om de query interessanter te maken.

Dit is de query:

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  

Let op het volgende uit de vorige query:

  • De XQuery in de query()-methode maakt de XML.

  • Het trefwoord namespace wordt gebruikt om een naamruimtevoorvoegsel te definiĆ«ren in de XQuery Prolog-. Dit gebeurt omdat de ProductModelName kenmerkwaarde wordt opgehaald uit de kolom CatalogDescription xml type, waaraan een schema is gekoppeld.

Dit is het resultaat:

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

Zie ook

SQL Server XQuery Extension Functions
type XML vergelijken met niet-getypte XML-
XML-gegevens (SQL Server)
Exemplaren van XML-gegevens maken
xml-gegevenstypemethoden
XML DML- (XML Data Modification Language)