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 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)