Naši partneři
BMI SYSTEM CZECH
Informační systémy budoucnosti

Jak dostat XML z SQL Serveru do souboru


Vytvoříme XML dotazem

Když jsem rozepisoval dnešní článek, sám jsem netušil, že pro mě skončí docela velkým překvapením. Pojďte se nechat překvapit spolu se mnou.

Pokud někdo nevíte, pomocí klauzule FOR XML v příkazu SELECT lze vytvořit výstup ne v relačním, ale v XML formátu.

 

Tady je jednoduchý příklad:

SELECT FirstName, LastName FROM Person.Person

FOR XML PATH('Osoba'), root('SeznamOsob')

 

Výsledkem dotazu je XML dokument, který má root element SeznamOsob, a každá osoba je popsána v elementu Osoba, který obsahuje elementy FirstName a LastName.

Při troše hraní si lze vytvořit i velmi obsáhlé dokumenty (ne jako v uvedeném příkladu), ale tyto dokumenty jsou stále jen výstupem, který je ve tvaru "jediný sloupec jediného řádku - datový typ XML". Naskýtá se otázka, jestli jsme nuceni tvořit vlastní program (třeba v .NET), nebo máme jednodušší nástroj, který udělá "černou práci" přesunu tohoto jediného sloupce za nás. Tím nástrojem je příkazová řádka zvaná bcp.

 
bcp - command line s velkým ALE

Microsoft SQL Server od nepaměti poskytuje jako jeden z nástrojů program příkazové řádky zvaný bcp (Bulk Copy Program). Tento program umí uchopit výsledkovou sadu a vložit ji do souboru na zadané cestě (resp. vytvořit na zadané cestě soubor zadaného názvu). Jak bcp funguje? Tady je příklad:

 

bcp "příkaz (SELECT, EXEC procedury)" queryout "cesta k výstupnímu souboru"  -S název serveru -T

Parametr T říká, že se bcp připojí v kontextu doménového uživatele, nic více nepotřebujeme. Kromě velkého T (připomeňme, že všechny command line programy SQL serveru v parametrech rozlišují velká a malá písmena) můžeme ještě volit další parametry, kterými například určíme řádkovací znaky apod., ale to je záležitost pohledu do Books Online, proto se dalšími parametry nebudeme zabývat. Výjimku tvoří parametr C. Tento parametr je uváděn jako zpětně kompatibilní (mezi verzemi 2005 a 2000), ale měl by být funkční. Parametr "C" - jako "COLLATE" - lze použít pro uložení řetězce (XML, čistého textu) do výstupního souboru v zadané znakové sadě. Ale ouha! Nefunguje to. Takže v případě ukládání českých znaků se vždy výsledek uloží pomocí ANSI kódování (cp 1250), a není možné jej překódovat (já jsem požadoval na střídačku UTF-8 a iso-8859-2). Takže nezbývá, než si překódování zajistit sám.

 

 
Závěrem

Bcp je velký pomocník pro rychlé a jednoduché uložení výsledku dotazu do souboru, ale potíž s kódováním, která američany asi netrápí, jej v našich podmínkách poněkud degraduje. Proto se v navazujícím článku podíváme na něco, co nám pomůže provést uložení znaků tak, jak chceme my.

 
Sdílejte tuto položku se svými přáteli
 
Související články
Někdy mě nástroje vestavěné v MS Windows dokáží dovést k šílenství, a v takových případech pomůže jediné - pomož si sám.
10/1/2009 4:08:55 PM
Vždycky jsem XML soubory na SQL server ukládal přes .NET rozhraní. A už nikdy více!
7/4/2009 5:07:28 PM
TOPlist