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.
Gilt für:SQL Server
Macht eine Variable verfügbar, die einen relationalen SQL-Wert in einem XQuery-Ausdruck enthält.
sql:variable("variableName") as xdt:anyAtomicType?
Wie im Thema Binding Relational Data Inside XML beschrieben, können Sie diese Funktion verwenden, wenn Sie XML-Datentypmethoden verwenden, um einen relationalen Wert in XQuery verfügbar zu machen.
Die Query()-Methode wird beispielsweise verwendet, um eine Abfrage für eine XML-Instanz anzugeben, die in einer XML-Datentypvariable oder -spalte gespeichert ist. Manchmal möchten Sie möglicherweise auch, dass Ihre Abfrage Werte aus einer Transact-SQL-Variablen oder einem Parameter verwendet, um relationale und XML-Daten zusammenzuführen. Dazu verwenden Sie die sql:variable-Funktion .
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 nur im Kontext des Quellausdrucks einer XML-DML-Insert-Anweisung auf eine XML-Instanz verweisen. Andernfalls können Sie nicht auf Werte verweisen, die vom Typ "XML " oder einem benutzerdefinierten Typ (Common Language Runtime, CLR) sind.
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 XML-Typspalte , 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 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" />
SQL Server XQuery-Erweiterungsfunktionen
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)