Einbinden relationaler Daten in XML-Daten

Sie können xml-Datentypmethoden für eine xml-Datentypvariable oder -spalte angeben. Beispielsweise wird von der query()-Methode (xml-Datentyp) der angegebene XQuery-Ausdruck für eine XML-Instanz ausgeführt. Beim Erstellen von XML-Code auf diese Art sollten Sie einen Wert aus einer Nicht-XML-Typspalte oder eine Transact-SQL-Variable einbringen. Dieser Prozess wird als Einbinden relationaler Daten in XML bezeichnet.

Um relationale Nicht-XML-Daten in XML zu binden, bietet das SQL Server-Datenbankmodul folgende Pseudofunktionen:

Sie können diese Funktionen jedes Mal mit xml-Datentypmethoden verwenden, wenn Sie einen relationalen Wert in XML verfügbar machen möchten.

Diese Funktion kann nicht zum Verweisen auf Daten in Spalten oder Variablen der xml-Typen, der CLR-benutzerdefinierten Typen sowie der Typen datetime, smalldatetime, text, ntext, sql_variant und image verwendet werden.

Das Einbinden ist außerdem nur zur Leseberechtigung. Deshalb können Sie in Spalten keine Daten schreiben, die diese Funktion verwenden. Beispielsweise ist sql:variable("@x")="some expression" nicht zulässig.

Beispiel: Domänenübergreifende Abfrage mithilfe von sql:variable()

In diesem Beispiel wird gezeigt, wie eine Anwendung mit sql:variable () eine Abfrage parametrisieren kann. Die ISBN wird mit der SQL-Variablen @isbn übergeben. Durch Ersetzen der Konstante durch sql:variable() kann die Abfrage zum Suchen nach jeder ISBN und nicht nur nach der ISBN 0-7356-1588-2 verwendet werden.

DECLARE @isbn varchar(20)
SET     @isbn = '0-7356-1588-2'
SELECT  xCol
FROM    T
WHERE   xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1

sql:column() kann auf ähnliche Weise verwendet werden und bietet weitere Vorteile. Indizes für die Spalte können aus Effizienzgründen verwendet werden, was durch den kostenbasierten Abfrageoptimierer entschieden wird. Außerdem kann die berechnete Spalte zum Speichern einer heraufgestuften Eigenschaft verwendet werden.

Siehe auch

Konzepte

Andere Ressourcen