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:
Mithilfe von sql:column()-Funktion (XQuery) können Sie die Werte aus einer relationalen Spalte in einem XQuery- oder XML DML-Ausdruck verwenden.
sql:variable()-Funktion (XQuery). Gibt Ihnen die Möglichkeit, den Wert einer SQL-Variablen im XQuery- oder XML DML-Ausdruck zu verwenden.
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.