Przykłady luzem, importowanie i eksportowanie dokumentów XML
Możesz import zbiorczy dokumentów XML do SQL Server bazy danych lub luzem eksportować je z SQL Server bazy danych.W tym temacie przedstawiono przykłady zarówno.
Aby import zbiorczy dane z pliku danych do SQL Server tabela lub widoku niepodzielonego na partycje, można użyć następujących:
BCP narzędzie
Można również użyć bcp narzędzie do eksportowania danych z dowolnego miejsca w SQL Server bazy danych, która działa instrukcja SELECT, w tym widoki podzielonym na partycje.
WSTAW LUZEM
WSTAW...WYBIERZ * Z OPENROWSET(BULK...)
Aby uzyskać więcej informacji, zobacz Dane luzem przywozu i wywozu przy użyciu narzędzia bcp i Importowanie danych luzem za pomocą ZBIORCZYM WSTAWIANIEM lub OPENROWSET(BULK...).
Przykłady
Przykłady są następujące:
A.Importowanie danych XML jako strumień bajtów binarnych luzem
B.Importowanie danych XML w istniejącym wierszu luzem
C.Luzem, importowanie danych XML z pliku, który zawiera DTD
D.Określanie terminator pola jawnie przy użyciu plik formatu
E.Eksportowanie danych XML luzem
A.Importowanie danych XML jako strumień bajtów binarnych luzem
Gdy użytkownik import zbiorczy danych XML z pliku, który zawiera deklaracja kodowania, który chcesz zastosować, określ opcję SINGLE_BLOB w klauzula OPENROWSET(BULK…).Opcja SINGLE_BLOB, zapewnia analizatora składni XML w SQL Server importuje dane zgodnie z kodowaniem określonych w deklaracja XML.
Przykładowa tabela
Aby przetestować przykład A, należy utworzyć tabela przykładowej T.
USE tempdb
CREATE TABLE T (IntCol int, XmlCol xml)
GO
Przykładowy plik danych
Przed uruchomieniem przykład A, należy utworzyć plik zakodowany w formacie UTF-8 (C:\SampleFolder\SampleData3.txt) zawiera następujące wystąpienie próbki, które określa UTF-8 kodowania systemu.
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<ProductDescription ProductModelID="5">
<Summary>Some Text</Summary>
</ProductDescription>
</Root>
Przykład A
W tym przykładzie użyto SINGLE_BLOB opcji w INSERT ... SELECT * FROM OPENROWSET(BULK...) instrukcja do importowania danych z pliku o nazwie SampleData3.txt i Wstaw XML wystąpienie w tabela jednokolumnową tabela próbki T.
INSERT INTO T(XmlCol)
SELECT * FROM OPENROWSET(
BULK 'c:\SampleFolder\SampleData3.txt',
SINGLE_BLOB) AS x
Uwagi
Za pomocą SINGLE_BLOB w tym przypadek, można uniknąć niezgodności między kodowanie dokumentu XML (określoną przez kodowanie deklaracja XML) i codepage ciąg implikowane przez serwer.
Jeśli używasz NCLOB lub CLOB typów danych i do strony kodowej lub konflikt kodowania, należy wykonać jedną z następujących czynności:
Usuń deklaracja XML, aby pomyślnie importować zawartość pliku danych XML.
Określić stronę kodową w opcji Strona KODOWA kwerendę, która dopasowuje schemat kodowania, który jest używany w deklaracja XML.
Dopasować lub rozwiązać ustawień sortowanie bazy danych z kodowaniem XML inny niż Unicode.
[Do góry]
B.Importowanie danych XML w istniejącym wierszu luzem
W tym przykładzie użyto OPENROWSET dostawca zbiorczych zestawów zestaw wierszy dodać XML wystąpienie do istniejącego wiersza lub zestaw wierszy w tabela przykładowej T.
Ostrzeżenie
Aby uruchomić ten przykład, należy najpierw wykonać skryptu testu w przykładzie A.Ten przykład tworzy tempdb.dbo.T tabela i luzem importuje dane z SampleData3.txt.
Przykładowy plik danych
Przykład b wykorzystuje zmodyfikowaną wersja SampleData3.txt Przykładowy plik danych z poprzedniego przykładu.Aby uruchomić ten przykład, należy zmodyfikować zawartość tego pliku w następujący sposób:
<Root>
<ProductDescription ProductModelID="10">
<Summary>Some New Text</Summary>
</ProductDescription>
</Root>
Przykład B
-- Query before update shows initial state of XmlCol values.
SELECT * FROM T
UPDATE T
SET XmlCol =(
SELECT * FROM OPENROWSET(
BULK 'C:\SampleFolder\SampleData3.txt',
SINGLE_BLOB
) AS x
)
WHERE IntCol = 1
GO
[Do góry]
C.Luzem, importowanie danych XML z pliku, który zawiera DTD
Uwaga dotycząca zabezpieczeń |
---|
Zaleca się, że nie włączenie obsługi definicji typu dokumentu (pliki DTD), jeśli nie jest wymagana w danym środowisku XML.Włączanie obsługi DTD zwiększa attackable obszar powierzchni serwera i może narazić ataku typu "odmowa usługa".Jeśli trzeba włączyć obsługę DTD, można zmniejszyć to zagrożenie bezpieczeństwa przez przetwarzanie tylko zaufanych dokumentów XML. |
Podczas próby użycia bcp polecenia do importowania danych XML z pliku DTD, zawiera, może wystąpić błąd podobny do następującego:
"SQLState = 42000, NativeError = 6359"
"Błąd = [Microsoft] [SQL Server Native Client] [SQL Server] analizy XML z wewnętrznego podzbiór elementów DTD nie jest dozwolone.Użyj PRZEKONWERTOWAĆ opcja Styl 2 umożliwiające ograniczony wewnętrznego podzbiór obsługi DTD."
"Kopiowania BCP %s nie powiodło się."
Aby obejść ten problem, można importować dane XML z pliku danych, który zawiera DTD za pomocą OPENROWSET(BULK...) Funkcja, a następnie określając CONVERT opcji w SELECT klauzula polecenia.Podstawowa składnia polecenia jest:
INSERT ... SELECT CONVERT(…) FROM OPENROWSET(BULK...)
Przykładowy plik danych
Zanim można przetestować przykład import zbiorczy, można utworzyć plik (C:\temp\Dtdfile.xml) zawiera następujące wystąpienie próbki:
<!DOCTYPE DOC [<!ATTLIST elem1 attr1 CDATA "defVal1">]><elem1>January</elem1>
Przykładowa tabela
W przykładzie c T1 przykładową tabela, która jest tworzona przez następujące CREATE TABLE instrukcja:
USE tempdb
CREATE TABLE T1(XmlCol xml);
GO
Przykład C
W tym przykładzie użyto OPENROWSET(BULK...) i CONVERT opcji w SELECT klauzula importowania danych XML z Dtdfile.xml do tabela przykładowej T1.
INSERT T1
SELECT CONVERT(xml, BulkColumn, 2) FROM
OPENROWSET(Bulk 'c:\temp\Dtdfile.xml', SINGLE_BLOB) [rowsetresults]
Po INSERT instrukcja wykonuje, oddzielonych z XML DTD i przechowywane w T1 tabela.
[Do góry]
D.Określanie terminator pola jawnie przy użyciu plik formatu
W poniższym przykładzie jak import zbiorczy następujący dokument XML Xmltable.dat.
Przykładowy plik danych
Dokument w Xmltable.dat zawiera dwie wartości XML, jeden dla każdego wiersza.Pierwsza wartość XML jest zakodowany z UTF-16, a druga wartość jest zakodowany z UTF-8.
Zawartość tego pliku danych są wyświetlane w następujących automatyczna kopia zapasowa szesnastkowy:
FF FE 3C 00 3F 00 78 00-6D 00 6C 00 20 00 76 00 *..<.?.x.m.l. .v.*
65 00 72 00 73 00 69 00-6F 00 6E 00 3D 00 22 00 *e.r.s.i.o.n.=.".*
31 00 2E 00 30 00 22 00-20 00 65 00 6E 00 63 00 *1...0.". .e.n.c.*
6F 00 64 00 69 00 6E 00-67 00 3D 00 22 00 75 00 *o.d.i.n.g.=.".u.*
74 00 66 00 2D 00 31 00-36 00 22 00 3F 00 3E 00 *t.f.-.1.6.".?.>.*
3C 00 72 00 6F 00 6F 00-74 00 3E 00 A2 4F 9C 76 *<.r.o.o.t.>..O.v*
0C FA 77 E4 80 00 89 00-00 06 90 06 91 2E 9B 2E *..w.............*
99 34 A2 34 86 00 83 02-92 20 7F 02 4E C5 E4 A3 *.4.4..... ..N...*
34 B2 B7 B3 B7 FE F8 FF-F8 00 3C 00 2F 00 72 00 *4.........<./.r.*
6F 00 6F 00 74 00 3E 00-00 00 00 00 7A EF BB BF *o.o.t.>.....z...*
3C 3F 78 6D 6C 20 76 65-72 73 69 6F 6E 3D 22 31 *<?xml version="1*
2E 30 22 20 65 6E 63 6F-64 69 6E 67 3D 22 75 74 *.0" encoding="ut*
66 2D 38 22 3F 3E 3C 72-6F 6F 74 3E E4 BE A2 E7 *f-8"?><root>....*
9A 9C EF A8 8C EE 91 B7-C2 80 C2 89 D8 80 DA 90 *................*
E2 BA 91 E2 BA 9B E3 92-99 E3 92 A2 C2 86 CA 83 *................*
E2 82 92 C9 BF EC 95 8E-EA 8F A4 EB 88 B4 EB 8E *................*
B7 EF BA B7 EF BF B8 C3-B8 3C 2F 72 6F 6F 74 3E *.........</root>*
00 00 00 00 7A *....z*
Przykładowa tabela
Podczas możesz import zbiorczy lub wyeksportować dokument XML, należy użyć terminator pola , prawdopodobnie nie może występować w wszelkich dokumentów; na przykład serii czterech wartości null (\0) następuje litera z: \0\0\0\0z.
W tym przykładzie przedstawiono sposób użycia tego terminator pola dla xTable tabela przykładowej.Aby utworzyć tę przykładową tabela, należy użyć następujących CREATE TABLE instrukcja:
USE tempdb
CREATE TABLE xTable (xCol xml);
GO
Przykładowy plik formatu
terminator pola musi być określona w plik formatu.Przykład d używa innych niż XML plik formatu o nazwie Xmltable.fmt zawiera następujące:
9.0
1
1 SQLBINARY 0 0 "\0\0\0\0z" 1 xCol ""
Można użyć ten plik formatu dokumentów XML import zbiorczy do xTable tabela za pomocą bcp polecenia lub BULK INSERT lub INSERT ... SELECT * FROM OPENROWSET(BULK...) instrukcja.
Przykład D
W tym przykładzie użyto Xmltable.fmt plik formatu w BULK INSERT instrukcja do importowania zawartości pliku danych XML o nazwie Xmltable.dat.
BULK INSERT xTable
FROM 'C:\Xmltable.dat'
WITH (FORMATFILE = 'C:\Xmltable.fmt');
GO
[Do góry]
E.Eksportowanie danych XML luzem
W poniższym przykładzie użyto bcp dane XML wywóz luzem z tabela utworzonego w poprzednim przykładzie za pomocą tego samego XML plik formatu.W następującej bcp polecenia, <server_name> i <instance_name> reprezentują symboli zastępczych, które należy zastąpić odpowiednie wartości:
bcp bulktest..xTable out a-wn.out -N -T -S<server_name>\<instance_name>
Ostrzeżenie
SQL Server nie zapisuje Kodowanie XML, gdy dane XML jest zachowywane w bazie danych.Therefore, the original encoding of XML fields is not available when XML data is exported.SQL Server uses UTF-16 encoding when exporting XML data.
[Do góry]
Zobacz także