Comelio GmbH Rellinghauser Straße 10 D-45128 Essen Deutschland Fon: 0201-437517-0 Fax: 0201-437517-10 info@comelio.com
Comelio GmbH Goethestraße 34 D-13086 Berlin Deutschland info@comelio.com
Comelio GmbH (Ecos) Glockengießerwall 17 D-20095 Hamburg Deutschland info@comelio.com
Comelio GmbH (Ecos) Mainzer Landstraße 27-31 D-60329 Frankfurt Deutschland info@comelio.com
Comelio GmbH (Ecos) Stiglmaierplatz/Dachauer Str. 37 D-80335 München Deutschland info@comelio.com
Comelio GmbH (Ecos) Liebknechtstr. 33 D-70565 Stuttgart Deutschland info@comelio.com
Comelio GmbH Nevinghoff 16 D-48147 Münster Deutschland
Comelio GmbH Friedrich - List - Platz 1 D-04103 Leipzig Deutschland
Comelio GmbH St. Johanner Strasse 41-43 D-66111 Saarbrücken Deutschland
Comelio GmbH Kaiser-Wilhem-Ring 27–29 D-50672 Köln Deutschland
Comelio GmbH Münsterstraße 248 D-40470 Düsseldorf Deutschland
Comelio GmbH Fürther Strasse D-90429 Nürnberg Deutschland
Comelio GmbH
Bremen Deutschland

|
Comelio-Blog > MS SQL Server > Variablen mit XML-Inhalt Variablen mit XML-Inhalt
|

Erstellt man eine Abfrage, welche XML-Werte zurückliefert, dann erhält man als Ergebnis Werte im Datentyp xml. Diese können dann direkt in einer Variablen oder für einen Rückgabewert einer Funktion genutzt werden. Dieser besondere Datentyp verhält sich wie jeder andere, weil er überall dort auftauchen kann, wo auch ein anderer Datentyp genutzt werden kann. Zum Beispel als Datentyp für eine Variable oder einen Rückgabewert.
|
 | Kontakt
|
XML Variablen und Spalten
Erstellt man eine Abfrage, welche XML-Werte zurückliefert, dann erhält man als Ergebnis Werte im Datentyp xml. Diese können dann direkt in einer Variablen oder für einen Rückgabewert einer Funktion genutzt werden. Dieser besondere Datentyp verhält sich wie jeder andere, weil er überall dort auftauchen kann, wo auch ein anderer Datentyp genutzt werden kann. Zum Beispel als Datentyp für eine Variable oder einen Rückgabewert.
Der Datentyp xml hat als einziger Datentyp, der von T-SQL vorgeben ist, einen
so genannten Konstruktor. Dies ist ein optionaler Klammerausdruck, mit dem Werte
definiert werden können. Dadurch wird sichergestellt, dass nicht nur XML-Daten
genutzt werden, sondern dass diese Daten auch gültig für ein Schema, d.h. für
ein Regeldokument sind. In der Dokumentation wird XML zwichen typisiertem und
nicht-typisiertem XML unterschieden.
Ene nicht-typisierte XML-Variable soll erstellt und über eine Abfrage mit Werten gefüllt werden. Dazu gibt es zunächst zwei Variablen productXML und productChar welche als xml und nvar-char(max) deklariert werden. Mit der Syntax SELECT @variable = spalte kann man Werte aus einer Spalte abrufen. Welche Spalten in den Variablen gespeichert werden sollen, kann genau festgelegt werden, da andere Spalten unberücksichtigt bleiben.
Bei der Umwandlung von Zeichenketten in XML und zurück kann man zwischen den beiden Funktionen CAST und CONVERT wählen. Wichtig ist bei der Umwandlung in XML, den richtigen Wert für den optionalen style-Parameter von CONVERT zu verwenden.
CAST ( expression AS data_type [ (length ) ])
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Nachfolgend eine Liste mit den möglichen style Parametern für die Funktion convert.
- Der Standartwert 0 löscht bedeutungslose Zeichenketten und lässt keine interne DTD-Teilmenge zu. Keine Angabe der Document Type Defintion ist zulässig.
- Mit dem Parameterwert 1 verbleiben bedeutungslose Zeichenketten im Dokument. Dies bedeutet, dass das XML-Standardattribut xml:space, welches immer verwendet werden darf, den Wert preserve (Leerzeichen erhalten) besitzt
- 2 legt fest, dass interne DTD-Teilmengen - Document Type Definition-Angaben - mit einfachen Regeln berücksichtigt werden. Standardwerte für Attribute werden aus der DTD in das XML übernommen. Selbst erstellte, interne Entitäten werden aus der DTD in das XML kopiert und schließlich wird eine Syntaxüberprüfung durchgeführt. Externe DTD-Teilmengen werden nicht beachtet.
- 3 bedeutet, dass bedeutungslose Leerzeichen erhalten bleiben und dass - wie beim Parameterwert 2 - die begrenzte DTD-Verarbeitung durchgeführt wird
Nachfolgend ein Beispiel um zu zeigen, wie einfach die Umwandlung ist. Es wird zwischen beiden Variablen konvertiert und schließlich das Ergebnis mit PRINT oder mit SELECT ausgegeben.
DECLARE @productXML xml, @productChar nvarchar(max)
SET @productXML = (
SELECT TOP 30 Name,
ProductNumber,
ListPrice
FROM Production.Product
ORDER BY ProductID DESC
FOR XML PATH('Product'), ROOT('Product-List'))
SET @productChar = CONVERT(nvarchar(max), @productXML)
SET @productXML = CAST(@productChar AS xml)
PRINT @productChar
Darüber hinaus kann man, anstelle vom Abruf der XML-Daten aus einer Abfrage, die Vollständige oder teilweise Erstellung von XML-Daten als Zeichenkette beuntzen. Jenes ist zum Beispiel notwendig, wenn die XML-Datei nicht aus einer sehr umpfangreichen Abfrage stammt, sondern aus mehreren einzelnen Abfragen erstellt und schließlich zusammengesetzt wird. Durch einfaches Erstellung einer Zeichenkette mit dem XML-typischen Tag-Zeichen < und >, kann dieser Lösungsansatz umgesetzt werden. Die Umwandlung geshieht hier wahlweise mit einen der beiden vorgestellten Funktionen CAST oder CONVERT.
Neben der Speicherung von XML in einer Variablen ist es ebenfalls zulässig, Spalten von (temporären) Tabellen oder Variablen, die mit table erstellt wurden, mit dem Datentyp xml auszustatten. Die aus einer Zeichenkette erzeugte XML-Datei wird daher in einer mit table erstellten Tabelle gespeichert, wobei an dieser Stelle auch temporäre oder gewöhnliche DB-Tabellen genutzt werden können. Diese Daten lassen sich dann wieder mit einem ganz gewöhnlichen SELECT abrufen, wobei in diesem Fall beim Abruf auch noch eine Umwandlung in eine Zeichenkette erfolgen soll, was jedoch nicht notwendig ist, sondern nur beispielhaft vorgeführt wird. DECLARE @productXML xml, @productChar nvarchar(max)
DECLARE @xmlTable table(nr int, product xml)
SET @productXML = CONVERT(xml, N'<Product-List>
<Product> <Name> Road-750 Black, 52</Name>
<ProductNumber> BK-R19B-52</ProductNumber>
<ListPrice>539.9900</ListPrice></Product></Product-List> ')
INSERT INTO @xmlTable
VALUES (1, @productXML)
SELECT @productChar = CAST(product AS nvarchar(max))
FROM @xmlTable
PRINT @productChar
Die Speicherung von XML Dateien in Tabellen ist ebenfalls möglich. Im zurückliegenden Script wurde eine Variable in einem gewöhnlichen INSERT-Befehl aufgerufen. Als weiter Lösung, hätte man auch eine XML-Zeichenkette nach XML umgewandelt können. Letztens kann man die Daten einer Abfrage, welche XML generiert, direkt in einer INSERT-Anweisung - also ohne Varibale - aufzurufen. Diese Abfrage wird in zwei runden Klammern plaziert.
CREATE TABLE #xmlTable(nr int, product xml)
INSERT INTO #xmlTable
SELECT 1, (SELECT TOP 30
Name,
ProductNumber,
ListPrice
FROM Production.Product
FOR XML PATH('Product'), ROOT('Product-List'))
SELECT CAST(product AS nvarchar(max)) FROM #xmlTable
Eine weitere Möglichkeit ist der Zugriff auf eine XML Datei im Dateisystem. Die Lösung dieses Problemes ist die Anweisung OPENROWSET, welche eigentlich für den Massenimport aus Textdateien gedacht ist. Ihre Anwendung ist zwar in T-SQL-Programmen hinterlegt, aber die Benutzung wird im Buch zur Administration beschrieben. Die allgemeine Syntax soll hier reichen, da dies ansonsten viel zu umpfangreich würde.
OPENROWSET
( BULK 'data_file' ,
{ FORMATFILE = 'format_file_path' [ <bulk_options> ]
| SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB } )
Im Wesentlichen besteht die Anweisung aus OpenRowset und der BULK-Klausel, welche für eine beliebige XML-Datei im Dateisystem gilt und die Form eines SINGLE_BLOB darstellt. auch hier ist eine Umwandlung von Nöten.
DECLARE @productXML xml
SELECT @productXML = CAST(textFile AS xml)
FROM OpenRowset(BULK 'c:/products.xml',
SINGLE_BLOB) C(textFile)
SELECT @productXML
XML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-GladbachXML Consulting MS SQL Server: Variablen mit XML-Inhalt - MS SQL Server T-SQL XML Webservices Programmierung Bücher Anleitung Tutorial Skulschus Wiederstein Kozik MS Server Services Business XML T-SQL Analysis .NET Bücher Webservices SQL Intelligence Reporting Microsoft Bochum Duisburg Berlin Leipzig Köln Frankfurt Herne Krefeld Mülheim Bonn Recklinghausen Bremen Hannover Hamm Essen München Dresden Dortmund Hamburg Hagen Düsseldorf Stuttgart Mönchen-Gladbach |