Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

黄舟
黄舟Original
2017-03-09 17:10:101352Durchsuche

T-SQLOperation XML-Daten

1. Vorwort

SQL Server 2005 wurde ein nativer Datentyp namens XML eingeführt. Benutzer können Tabellen erstellen, die zusätzlich zu relationalen Spalten eine oder mehrere Spalten vom Typ XML enthalten. Darüber hinaus sind Variablen und Parameter zulässig. Um XML-Modellfunktionen wie Dokumentreihenfolge und rekursive Strukturen besser zu unterstützen, werden XML-Werte in einem internen Format als Large Binary Objects (BLOBs) gespeichert.

Wenn Benutzer XML-Daten in der Datenbank speichern, können sie die XML-Zeichenfolge verwenden. SQL Server konvertiert die Zeichenfolge automatisch in den XML-Typ und speichert sie in der Datenbank.

Da SQL Server XML-Felder unterstützt, stellen T-SQL-Anweisungen auch eine große Anzahl von XML-Operationsfunktionen bereit, um die Verwendung von XML-Feldern in SQL Server zu koordinieren. In diesem Artikel wird hauptsächlich erläutert, wie SQL-Anweisungen zum Bearbeiten von XML verwendet werden.

2. XML-Felder definieren

Während des Datenbankentwurfs können wir im Tabellendesigner problemlos ein Feld als XML-Typ definieren. Es ist zu beachten, dass XML-Felder nicht als Primärschlüssel oder Indexschlüssel verwendet werden können. Ebenso können wir SQL-Anweisungen verwenden, um Datentabellen mithilfe von XML-Feldern zu erstellen. Die folgende Anweisung erstellt eine Tabelle mit dem Namen „docs“ mit einem ganzzahligen Primärschlüssel „pk“ und einer untypisierten XML-Spalte „xCol“:

CREATE TABLE docs (pk INT PRIMARY KEY, xCol XML not null)

XML-Typen werden nicht nur in Tabellen verwendet, sondern können auch in gespeicherten Prozeduren, Transaktionen, Funktionen usw. vorkommen. Lassen Sie uns den ersten Schritt unserer XML-Operation abschließen, indem wir SQL-Anweisungen verwenden, um einen XML-Datentyp zu definieren und ihm einen Wert zuzuweisen:

declare @xmlDoc xml;
set @xmlDoc=&#39;<book id="0001">
<title>C Program</title>
<author>David</author>
<price>21</price>
</book>&#39;

3. Abfrageoperation

Nachdem wir einen XML-Datentyp definiert haben, wird am häufigsten die Abfrageoperation verwendet. Lassen Sie uns vorstellen, wie SQL-Anweisungen zum Ausführen von Abfrageoperationen verwendet werden.

In T-SQL stehen zwei Funktionen zum Abfragen von XML-Typdaten zur Verfügung, nämlich query(xquery) und value(xquery, dataType). Unter diesen ruft query(xquery) die Abfrage mit den Daten des Tags ab , während value(xquery, dataType) den Inhalt des Tags abruft. In der nächsten Klasse werden wir diese beiden Funktionen zum Abfragen verwenden.

1, verwenden Sie query(xquery) zum Abfragen.

Wir müssen den Titel des Buches abrufen. Verwenden Sie query(xquery) zum Abfragen , die Abfrageanweisung lautet:

select @xmlDoc.query(&#39;/book/title&#39;)

Das laufende Ergebnis ist wie in der Abbildung dargestellt:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

2 , mit Wert (xquery, dataType) Die Abfrage

ruft auch den Titel des Buches ab. Mithilfe der Wertfunktion müssen Sie zwei Parameter angeben, einen ist xquery und der andere ist die Art der zu erhaltenden Daten. Schauen Sie sich die folgende Abfrageanweisung an:

select @xmlDoc.value(&#39;(/book/title)[1]&#39;, &#39;nvarchar(max)&#39;)

Das laufende Ergebnis ist wie in der Abbildung dargestellt:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

3, Attributwert abfragen

Unabhängig davon, ob Sie eine Abfrage oder einen Wert verwenden, können Sie problemlos einen bestimmten Attributwert eines Knotens abrufen. Beispielsweise möchten wir wirklich die ID des Buchknotens abrufen . Wir verwenden hier die Wertmethode, die Aussage lautet:

select @xmlDoc.value(&#39;(/book/@id)[1]&#39;, &#39;nvarchar(max)&#39;)

Das laufende Ergebnis ist wie in der Abbildung gezeigt:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

4, xpath-Abfrage verwenden

xpath ist eine einheitliche XML-Abfrageanweisung, die von der .net-Plattform unterstützt wird. Mit XPath können Sie den gewünschten Knoten problemlos abrufen, ohne die Where-Anweisung zu verwenden. Beispielsweise haben wir einen weiteren Knoten zu @xmlDoc hinzugefügt und ihn wie folgt neu definiert:

set @xmlDoc=&#39;<root>
<book id="0001">
<title>C# Program</title>
<author>Jerry</author>
<price>50</price>
</book>
<book id="0002">
<title>Java Program</title>
<author>Tom</author>
<price>49</price>
</book>
</root>&#39;

--rufen Sie den Buchknoten mit der ID 0002 ab

select @xmlDoc.query(&#39;(/root/book[@id="0002"])&#39;)

Die obige Anweisung kann unabhängig ausgeführt werden , erhält es den Knoten mit der ID 0002. Die laufenden Ergebnisse lauten wie folgt:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)[6]

4. Änderungsvorgänge

SQL-Änderungsvorgänge umfassen Aktualisierung und Löschung. SQL stellt die Methode „modify()“ zum Ändern von XML bereit. Der Parameter der Änderungsmethode ist die XML-Änderungssprache. Die XML-Änderungssprache ähnelt SQLs Insert, Delete und UpDate, ist jedoch nicht dieselbe.

1, ändern Sie den Knotenwert

Wir möchten den Preis des Buches mit der ID 0001 auf 100 ändern, wir können die Änderungsmethode verwenden . Der Code lautet wie folgt:

set @xmlDoc.modify(&#39;replace value of (/root/book[@id=0001]/price/text())[1] with "100"&#39;)
--得到id为0001的book节点
select @xmlDoc.query(&#39;(/root/book[@id="0001"])&#39;)

Hinweis: Die Änderungsmethode muss nach dem Festlegen erscheinen. Das laufende Ergebnis ist wie in der Abbildung dargestellt:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

2, Knoten löschen

Als nächstes löschen wir Für den Knoten mit der ID 0002 lautet der Code wie folgt:

--删除节点id为0002的book节点
set @xmlDoc.modify(&#39;delete /root/book[@id=0002]&#39;)
select @xmlDoc

Das laufende Ergebnis ist wie in der Abbildung dargestellt:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

3、添加节点

很多时候,我们还需要向xml里面添加节点,这个时候我们一样需要使用modify方法。下面我们就向id为0001的book节点中添加一个ISBN节点,代码如下:

--添加节点

set @xmlDoc.modify(&#39;insert <isbn>78-596-134</isbn> before (/root/book[@id=0001]/price)[1]&#39;)
select @xmlDoc.query(&#39;(/root/book[@id="0001"]/isbn)&#39;)

运行结果如图:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

4、添加和删除属性

当你学会对节点的操作以后,你会发现,很多时候,我们需要对节点进行操作。这个时候我们依然使用modify方法,例如,向id为0001的book节点中添加一个date属性,用来存储出版时间。代码如下:

--添加属性

set @xmlDoc.modify(&#39;insert attribute date{"2008-11-27"} into (/root/book[@id=0001])[1]&#39;)
select @xmlDoc.query(&#39;(/root/book[@id="0001"])&#39;)

运行结果如图:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

如果你想同时向一个节点添加多个属性,你可以使用一个属性的集合来实现,属性的集合可以写成:(attribute date{"2008-11-27"}, attribute year{"2008"}),你还可以添加更多。这里就不再举例了。

5、删除属性

删除一个属性,例如删除id为0001 的book节点的id属性,我们可以使用如下代码:

--删除属性

set @xmlDoc.modify(&#39;delete root/book[@id="0001"]/@id&#39;)
select @xmlDoc.query(&#39;(/root/book)[1]&#39;)

运行结果如图:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

6、修改属性

修改属性值也是很常用的,例如把id为0001的book节点的id属性修改为0005,我们可以使用如下代码:

--修改属性

set @xmlDoc.modify(&#39;replace value of (root/book[@id="0001"]/@id)[1] with "0005"&#39;)
select @xmlDoc.query(&#39;(/root/book)[1]&#39;)

运行结果如图:

Detaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild)

OK,经过上面的学习,相信你已经可以很好的在SQL中使用Xml类型了,下面是我们没有提到的,你可以去其它地方查阅:exist()方法,用来判断指定的节点是否存在,返回值为true或false; nodes()方法,用来把一组由一个查询返回的节点转换成一个类似于结果集的表中的一组记录行。

 


Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes für SQL-Operationen auf XML-Feldern (Bild). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn