sql:variable()-Funktion (XQuery)
Macht eine Variable verfügbar, die einen relationalen SQL-Wert in einer XML-Dateninstanz enthält.
Syntax
sql:variable("variableName") as xdt:anyAtomicType?
Hinweise
Wie im Thema Einbinden relationaler Daten in XML-Daten beschrieben wird, können Sie diese Funktion verwenden, wenn Sie mithilfe von XML-Datentypmethoden einen relationalen Wert innerhalb von XML verfügbar machen.
Die query()-Methode wird z. B. zum Angeben einer Abfrage für eine XML-Instanz verwendet, die in einer Variablen oder Spalte des xml-Datentyps gespeichert ist. Manchmal sollen in einer Abfrage auch Werte aus einer Transact-SQL-Variablen oder einem -Parameter verwendet werden, um relationale und XML-Daten zu verbinden. Zu diesem Zweck können Sie die sql:variable-Funktion verwenden:
Der SQL-Wert wird einem entsprechenden XQuery-Wert zugeordnet, und sein Datentyp ist ein XQuery-Basistyp, der mit dem entsprechenden SQL-Typ äquivalent ist.
In SQL Server 2005 können Sie nicht auf Werte vom Typ xml oder von einem CLR-benutzerdefinierten Typ (Common Language Runtime) verweisen.
Beispiele:
A. Verwenden der sql:variable()-Funktion, um einen Transact-SQL-Variablenwert in XML zu verwenden
Im folgenden Beispiel wird eine XML-Instanz erstellt, die aus Folgendem besteht:
- Einem Wert (
ProductID
) aus einer Nicht-XML-Spalte. Zum Binden dieses Wertes im XML-Code wird die sql:column()-Funktion verwendet. - Einem Wert (
ListPrice
) aus einer Nicht-XML-Spalte aus einer anderen Tabelle. Diesql:column()
-Funktion wird auch hier zum Binden dieses Wertes im XML-Code verwendet. - Einem Wert (
DiscountPrice
) aus einer Transact-SQL-Variablen. Zum Binden dieses Wertes im XML-Code wird diesql:variable()
-Methode verwendet. - Einem Wert (
ProductModelName
) aus einer Spalte vom Typ xml, um die Abfrage interessanter zu gestalten.
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 in der vorherigen Abfrage Folgendes:
- Der XML-Code wird durch die XQuery-Abfrage in der
query()
-Methode erstellt. - Das
namespace
-Schlüsselwort wird zum Definieren eines Namespacepräfixes im XQuery-Prolog verwendet. 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" />
Siehe auch
Verweis
XQuery-Erweiterungsfunktionen in SQL Server
Konzepte
Typisiertes im Vergleich zu nicht typisiertem XML
XML-Datentyp
Generieren von XML-Instanzen
XML DML (Data Modification Language)