XQuery-Erweiterungsfunktionen – sql:variable()
Gilt für:SQL Server
Macht eine Variable verfügbar, die einen relationalen SQL-Wert in einem XQuery-Ausdruck enthält.
Syntax
sql:variable("variableName") as xdt:anyAtomicType?
Bemerkungen
Wie im Thema Bindung relationaler Daten innerhalb von XML beschrieben, können Sie diese Funktion verwenden, wenn Sie XML-Datentypmethoden verwenden, um einen relationalen Wert in XQuery verfügbar zu machen.
Beispielsweise wird die query()-Methode verwendet, um eine Abfrage für eine XML-Instanz anzugeben, die in einer xml-Datentypvariablen oder - Spalte gespeichert ist. Manchmal möchten Sie möglicherweise auch, dass Ihre Abfrage Werte aus einer Transact-SQL-Variable oder einem Parameter verwendet, um relationale und XML-Daten zusammenzuführen. Verwenden Sie dazu die Funktion sql:variable .
Der SQL-Wert wird einem entsprechenden XQuery-Wert zugeordnet, und sein Typ ist ein XQuery-Basistyp, der dem entsprechenden SQL-Typ entspricht.
Sie können nur im Kontext des Quellausdrucks einer XML-DML-Insert-Anweisung auf eine XML-Instanz verweisen. Andernfalls können Sie nicht auf Werte vom Typ xml oder einen benutzerdefinierten ClR-Typ (Common Language Runtime) verweisen.
Beispiele
A. Einfügen einer Transact-SQL-Variablen in XML mit der sql:variable()-Funktion
Im folgenden Beispiel wird eine XML-Instanz erstellt, die aus Folgendem besteht:
Einem Wert (
ProductID
) aus einer Nicht-XML-Spalte. Die sql:column()-Funktion wird verwendet, um diesen Wert im XML-Code zu binden.Einem Wert (
ListPrice
) aus einer Nicht-XML-Spalte aus einer anderen Tabelle. Diesql:column()
-Funktion wird auch hier zum Binden dieses Werts im XML-Code verwendet.Ein Wert (
DiscountPrice
) aus einer Transact-SQL-Variablen. Zum Binden dieses Werts im XML-Code wird diesql:variable()
-Methode verwendet.Ein Wert (
ProductModelName
) aus einer Spalte vom Typ xml , um die Abfrage interessanter zu machen.
Im Folgenden wird die Abfrage aufgeführt:
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
Beachten Sie hinsichtlich der vorherigen Abfrage Folgendes:
Der XML-Code wird durch die XQuery-Abfrage in der
query()
-Methode erstellt.Das
namespace
Schlüsselwort wird verwendet, um ein Namespacepräfix im XQuery Prolog zu definieren. Dies geschieht, weil derProductModelName
-Attributwert aus der Spalte desCatalogDescription xml
-Typs abgerufen wird, der ein Schema zugeordnet ist.
Dies ist das Ergebnis:
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
Weitere Informationen
XQuery-Erweiterungsfunktionen in SQL Server
Vergleichen von typisiertem XML mit nicht typisiertem XML
XML-Daten (SQL Server)
Erstellen von Instanzen der XML-Daten
xml Data Type Methods (xml-Datentypmethoden)
XML DML (Data Modification Language)