Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Macht eine Variable verfügbar, die einen relationalen SQL-Wert in einem XQuery-Ausdruck enthält.
Syntax
sql:variable("variableName") as xdt:anyAtomicType?
Hinweise
Wie im Thema Einbinden relationaler Daten in XML-Daten beschrieben, können Sie diese Funktion verwenden, wenn Sie mithilfe von XML-Datentypmethoden einen relationalen Wert innerhalb von XQuery 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.
Sie können auf eine xml-Instanz nur im Zusammenhang mit dem Quellenausdruck einer XML-DML-INSERT-Anweisung verweisen. Andernfalls können Sie nicht auf Werte des Typs xml oder eines benutzerdefinierten CLR (Common Language Runtime)-Typs 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. Zum Binden dieses Werts im XML-Code wird die sql:column()-Funktion verwendet.
Einem Wert (ListPrice) aus einer Nicht-XML-Spalte aus einer anderen Tabelle. Die sql:column()-Funktion wird auch hier zum Binden dieses Werts im XML-Code verwendet.
Einem Wert (DiscountPrice) aus einer Transact-SQL-Variablen. Zum Binden dieses Werts im XML-Code wird die sql: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 hinsichtlich 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 der ProductModelName-Attributwert aus der Spalte des CatalogDescription 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
Vergleichen von typisiertem XML mit nicht typisiertem XML
Erstellen von Instanzen der XML-Daten
XML DML (Data Modification Language)