SQLShack
In dit artikel laten we zien hoe je een XML data type document maakt uit een relationele tabel met behulp van verschillende T-SQL manieren. Voor gegevensmigratie kan bijvoorbeeld informatie uit de SQL Server-database worden geëxporteerd en geïmporteerd met XML in een ander kader. XML is een standaard manier van extraheren, opslaan en manipuleren van gegevens. Een aspect van het werken met het XML-gegevenstype is het maken van XML uit relationele informatie, wat wordt gedaan met behulp van de for XML-voorziening in SQL Server:
een XML-gegevenstype kan op een alternatieve manier worden gebruikt in SQL Server. Dit artikel zal een aantal fundamentele toepassingen van XML uitleggen. Voor XML keyword is een bepaling die kan worden toegevoegd met de SELECT query statement om het XML-document in de vereiste formulieren in een query resultaat voor te bereiden. Het resultaat is een Unicode string met componenten en kwaliteiten gecontroleerd door de verschillende modi bepaald in de voorziening met voor XML.
de vier standen zijn:
- RAW
- AUTO
- expliciete
- pad
onderstaande tabel toont voorbeeldgegevens voor verdere verduidelijking van de verschillende methodologieën:
automatische modus
automatische modus is een van de benaderingen om over te zetten naar de XML-elementen uit de rijen van de tabel. Elementnamen van het XML-document die overeenkomen met de kolomalias of kolomnaam van de SELECT-query.
het queryresultaat is bijvoorbeeld geproduceerd met één XML-document voor de bovenstaande voorbeeldgegevens. Het queryresultaat had 5 rijen in een resultaatset, die wordt omgezet in een solitaire cel resultaatset. Deze methodologie wordt gebruikt in een single-valued functie om meerdere rijen in een enkele return variabele te retourneren.
1
2
3
|
selecteer user_id, fname, lname, email_
uit user_details
voor XML AUTO;
|
hier produceert AUTO headernamen met behulp van tabelnamen.
expliciete modus
voor meer controle over de styling van de volgende XML, kunnen SQL-ontwikkelaars de expliciete modus gebruiken. Met expliciete modus, een query resultaat zal worden veranderd in een enkel XML data type document met aangepaste XML labels en waarden. De expliciete modus zal een ander label instellen voor elke rij in een record. Zelfs, de expliciete modus maakt het ontwerpen van de XML-formaat als de gebruiker wil de positie van de elementen in de XML data type formaat in SQL Query in te stellen.
Hieronder is een voorbeeld van het gebruik van expliciete modus:
SQL-query:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
SELECTEER 1 als tag,
NULL als ouder, user_id als , NULL ALS , NULL ALS , NULL ALS FROM user_details
UNION ALL
SELECT 3 as tag,
1 as parent,
user_id as ,
fname AS ,
lname AS ,
email_ AS
FROM user_details
UNION ALL
select 2 as tag,
1 as parent,
user_id as ,
fname as ,
lname as ,
email_ as
from user_details
ORDER BY 3, 1
voor XML explicit;
|
expliciete modus resultaat:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<gebruiker>
<fname fname=”Jo” />
<lname lname=”Bruin” />
</gebruiker>
<gebruiker>
<fname fname=”Katie” />
<lname lname=”McAskill-Wit” />
</gebruiker>
<gebruiker>
<fname fname=”Mihail” />
<lname lname=”Frintu” />
</gebruiker>
<gebruiker>
<fname fname=”Jimmy” />
<lname lname=”Bischoff” />
</gebruiker>
<gebruiker>
<fname fname=”Alan” />
<lname lname=”Brouwer” />
</gebruiker>
|
RAW-modus
de meest voorkomende en vaak gebruikte modus door ontwikkelaars voor het maken van XML binnen voor XML is de RAW-modus. In principe voert de RAW-modus een element met de naam” rij ” uit van de resultaatset voor elke rij in de Select articulatie en de celwaarde van de rij wordt begrensd als een attribuut van het element. In een RAW-modus zal elke kolom worden behandeld als één element in de XML, en kolommen van die regels zullen worden toegeschreven aan hetzelfde element. De RAW-modus wordt gebruikt om elke rij in het resultaat te veranderen in een XML-component.
Voor RIJ-modus, het opvragen van verschillende modellen met verschillende uitgangen uitgelegd in de voorbeelden hieronder:
Voorbeeld 1
1
2
3
4
5
6
7
8
9
|
SELECTEER user_id, fname, lname, email_
UIT user_details VOOR XML-RAW <rij user_id=”1″ fname=”Jo” lname=”Bruin” email_=”[email protected]” /> <rij user_id=”2″ fname=”Katie” lname=”McAskill-Wit” email_=”[email protected]” />
<rij user_id=”3″ fname=”Mihail” lname=”Frintu” email_=”[email protected]” />
<rij user_id=”4″ fname=”Jimmy” lname=”Bischoff” email_=”[email protected]” />
<rij user_id=”5″ fname=”Alan” lname=”Brouwer” email_=”[email protected]” />
|
met de RAW-modus wordt de koptekst van elk element gedefinieerd als een Rij-element in het XML-resultaat en worden de kolommen van elke rij toegewezen binnen het rij-element in het XML-gegevenstype-resultaat.
Voorbeeld 2
1
2
3
4
5
6
7
8
9
10
11
|
SELECTEER user_id, fname, lname, email_
UIT user_details VOOR XML-RAW(‘gebruiker’), ROOT <root> <gebruiker user_id=”1″ fname=”Jo” lname=”Bruin” email_=”[email protected]” />
<gebruiker user_id=”2″ fname=”Katie” lname=”McAskill-Wit” email_=”[email protected]” />
<gebruiker user_id=”3″ fname=”Mihail” lname=”Frintu” email_=”[email protected]” />
<gebruiker user_id=”4″ fname=”Jimmy” lname=”Bischoff” email_=”[email protected]” />
<gebruiker user_id=”5″ fname=”Alan” lname=”Brouwer” email_=”[email protected]” />
</hoofdmap>
|
als de gebruiker alle elementen in een enkele tag wil opnemen, dan kan de ROOT optie met de RAW mode gebruikt worden en de header naam van elk element kan door de gebruiker gedefinieerd worden door een naam met de RAW() toe te voegen in het XML data type resultaat.
Voorbeeld 3
1
2
3
4
5
6
7
8
9
10
11
|
SELECTEER user_id, fname, lname, email_
UIT user_details VOOR XML-RAW(‘gebruiker’), WORTEL(‘UserDetails’) <UserDetails>
<gebruiker user_id=”1″ fname=”Jo” lname=”Bruin” email_=”[email protected]” />
<gebruiker user_id=”2″ fname=”Katie” lname=”McAskill-Wit” email_=”[email protected]” />
<gebruiker user_id=”3″ fname=”Mihail” lname=”Frintu” email_=”[email protected]” />
<gebruiker user_id=”4″ fname=”Jimmy” lname=”Bischoff” email_=”[email protected]” />
<gebruiker user_id=”5″ fname=”Alan” lname=”Brouwer” email_=”[email protected]” />
</Gebruikerdetails>
|
In de XML RAW ROOT kan de header worden ontworpen met een door de gebruiker gedefinieerde naam met de ROOT(). Zoals kan worden gezien in het voorbeeld is de <root> element wordt vervangen door de <UserDetails>
Voorbeeld 4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SELECTEER user_id, fname, lname, email_
UIT user_details VOOR XML-RAW ELEMENTEN > <user_id>1</user_id> <fname>Jo</fname>
<lname>Bruin</lname>
<email_>[email protected]</email_>
</rij>
<rij>
<user_id>2</user_id>
<fname>Katie</fname>
<lname>McAskill-Wit</lname>
<email_>[email protected]< / email_>
</rij>
|
met behulp van de ELEMENT directive met de RAW-modus, kan de gebruiker rij-element structuur-gebaseerde XML maken. Elke cel van de rij wordt geëxtraheerd met XML-elementen in het bovenliggende element van de rij als <rij>. In principe hebben we de elementen trefwoord in de bovenstaande query gebruikt om de kolommen weer te geven als elementen in de output XML.
PADMODUS
de beste modus voor het maken van XML met meer controle over het formaat is de PADMODUS. Met behulp van het pad kan de gebruiker eenvoudigere Select en supply XPath articulaties samenstellen voor de kolom om een commandostructuur toe te wijzen. Gebruik voor XML pad met subqueries om het juiste XML data type document te krijgen met de element-attribuut keten:
1
2
3
4
5
6
7
8
9
10
11
|
SELECTEER user_id, fname, lname, email_
UIT user_details WAAR email_ = ‘[email protected]’ VOOR XML-PAD; <rij> <user_id>3</user_id>
<fname>Michael</fname>
<lname>Frintu</lname>
<email_>[email protected]</email_>
</rij>
|
Conclusie
met Behulp van een server query resultaat te bereiken, een ander XML-indeling is eenvoudig. Het query-resultaat wordt geëxtraheerd in XML door een voor XML-slagzin op te nemen aan het einde van het SELECT-statement. Zoals besproken, hebben we een aantal alternatieven om het resultaat te structureren of te rangschikken met kolommen naar attributen of XML-knooppunten met het XML-gegevenstype.
- auteur
- recente berichten
Bekijk alle berichten van Jignesh Raiyani
- Pagina Levensverwachting (PLE) in SQL Server – juli 17, 2020
- Hoe te automatiseren Tabel Partitioneren in SQL Server – juli 7, 2020
- het Configureren van SQL Server Altijd Over de Beschikbaarheid van deze Groepen op de AWS EC2 – juli 6, 2020