Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 wordtsql:column()gebruikt om deze waarde in de XML te binden.Een waarde (
DiscountPrice) van een Transact-SQL variabele. De methodesql: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
namespacewordt gebruikt om een naamruimtevoorvoegsel te definiƫren in de XQuery Prolog-. Dit gebeurt omdat deProductModelNamekenmerkwaarde wordt opgehaald uit de kolomCatalogDescription xmltype, 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)