Examples of Bulk Importing and Exporting XML Documents
Możesz dokumentów import zbiorczy XML w SQL Server bazy danych lub zbiorczego eksportować je z SQL Server Baza danych. W tym temacie przedstawiono przykłady obu.
Zbiorcza importu danych z pliku danych do SQL Server tabela lub widok, nie na partycje, można użyć następujących czynności:
BCP utility
Można również użyć BCP narzędzie do eksportowania danych z dowolnego miejsca w SQL Server Baza danych, która działa instrukcja SELECT, w tym widoki na podzielonym na partycje.
WSTAWIANIA ZBIORCZEGO
WSTAW...WYBIERZ * Z OPENROWSET(BULK...)
Aby uzyskać więcej informacji zobacz Importing and Exporting Bulk Data by Using the bcp Utility i Importing Bulk Data by Using BULK INSERT or OPENROWSET(BULK...).
Przykłady
W przykładach są następujące:
A.ZBIORCZA importowania danych XML jako strumień bajtów binarnych
B.Importowanie danych XML w istniejącego wiersza zbiorczego
C.Zbiorcza importowania danych XML z pliku, który zawiera DTD
D.Określanie terminator pole jawnie przy użyciu formatu pliku
E.Zbiorcza eksportowania danych XML
A.Importowanie danych XML jako strumień bajtów binarnych zbiorczej
Gdy użytkownik import zbiorczy dane XML z pliku, który zawiera deklaracja kodowania, który chcesz zastosować, należy określić opcję SINGLE_BLOB w klauzula OPENROWSET(BULK…).Opcja SINGLE_BLOB sprawdza, czy że analizator składni XML w SQL Server Importuje dane zgodnie z schemat kodowania określonego w deklaracja XML.
Tabela próbki
Aby przetestować przykład A, należy utworzyć przykładową tabela T.
USE tempdb
CREATE TABLE T (IntCol int, XmlCol xml)
GO
Przykładowy plik danych
Przed uruchomieniem przykład A, należy utworzyć (plik do kodowania UTF-8C:\SampleFolder\SampleData3.txt) zawiera następujące wystąpienie próbki, które określa UTF-8 schemat kodowania.
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<ProductDescription ProductModelID="5">
<Summary>Some Text</Summary>
</ProductDescription>
</Root>
Dlatego wartość predykatu prawdziwość to wyrażenie ma wartość true tylko dla węzłów, którego położenie kontekstu jest 3.
W tym przykładzie użyto SINGLE_BLOB Opcja w INSERT ... SELECT * FROM OPENROWSET(BULK...) instrukcja do importowania danych z pliku o nazwie SampleData3.txt i wstawić instancję XML jednokolumnową tabelę przykładową tabelę 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ślone przez kodowanie deklaracja XML), a strona kodowa ciąg implikowane przez serwer.
Jeśli używasz NCLOB lub CLOB typów danych i do strony kodowej lub kodowania konflikt, należy wykonać jedną z następujących czynności:
Usuń deklaracja XML, aby pomyślnie importować zawartość pliku danych XML.
Określić strona kodowa, w przypadku opcji CODEPAGE kwerendy, która pasuje do schematu kodowania, który jest używany w deklaracja XML.
Zgodne lub rozwiązać, ustawienia sortowanie bazy danych w schemacie kodowania XML inny niż Unicode.
[Do góry]
B.Importowanie danych XML w istniejącego wiersza zbiorczego
W tym przykładzie użyto OPENROWSET dostawca zbiorczych zestawów zestaw wierszy dodać instancję XML do istniejącego wiersza lub zestaw wierszy w tabela przykładowej T.
Uwaga
Aby uruchomić ten przykład, należy najpierw wykonać skrypt testu, pod warunkiem że w przykładzie A.Ten przykład tworzy tempdb.dbo.T Tabela i zbiorczej importuje dane z SampleData3.txt.
Przykładowy plik danych
B przykładzie 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.Zbiorcza importowania danych XML z pliku, który zawiera DTD
Security Note: |
---|
Zaleca się nie włączyć obsługę definicje typu dokumentu (elementów 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ć na atak typu odmowa usługa.Jeśli musi zostać włączona obsługa DTD, to możesz zmniejszyć to zagrożenie bezpieczeństwa, przetwarzanie tylko zaufanych dokumentów XML. |
Podczas próby używania BCP polecenie, aby importować dane XML z pliku, który zawiera DTD, może wystąpić błąd podobny do następującego:
"SQLState = 42000 NativeError = 6359"
„ Błąd = [Microsoft] [klient SQL Server Native] [programu SQL Server] przetwarzania XML z wewnętrznego podzbiór elementów DTD nie jest dozwolone.Użycie CONVERT przy użyciu opcji stylu 2 umożliwiające ograniczony podzbiór wewnętrznego obsługi DTD. „
"Kopiowania BCP %s nie powiodło się. „
Aby rozwiązać ten problem, można importować dane XML z pliku danych, który zawiera DTD przy użyciu OPENROWSET(BULK...) Funkcja, a następnie określając CONVERT Opcja w SELECT Klauzula polecenia. Podstawowa składnia polecenia jest:
INSERT ...SELECT CONVERT(…) FROM OPENROWSET(BULK...)
Przykładowy plik danych
Aby przetestować ten przykład import zbiorczy, utworzyć (plikC:\temp\Dtdfile.xml) zawiera następujące wystąpienie przykładowe:
<!DOCTYPE DOC [<!ATTLIST elem1 attr1 CDATA "defVal1">]><elem1>January</elem1>
Tabela próbki
W przykładzie C T1 przykładową tabela, utworzoną przez następujące CREATE TABLE instrukcja:
USE tempdb
CREATE TABLE T1(XmlCol xml);
GO
Ten predykat wartość wartość typu logiczny.
W tym przykładzie OPENROWSET(BULK...) i określa CONVERT Opcja w SELECT Klauzula importowania danych XML z Dtdfile.xml w przykładowej tabela T1.
INSERT T1
SELECT CONVERT(xml, BulkColumn, 2) FROM
OPENROWSET(Bulk 'c:\temp\Dtdfile.xml', SINGLE_BLOB) [rowsetresults]
Po INSERT wykonuje instrukcję, the DTD jest usunięte z pliku XML i przechowywane w T1 Tabela.
[Do góry]
D.Określanie terminator pole jawnie przy użyciu formatu pliku
W poniższym przykładzie przedstawiono sposób zbiorczej importu 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 w formacie UTF-16, a druga wartość jest zakodowana w formacie UTF-8.
Zawartość tego pliku dane 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*
Tabela próbki
Zbiorcza importu lub eksportu dokumentu XML, należy użyć terminator pole prawdopodobnie nie może występować w dowolnym z dokumentów, na przykład szereg cztery wartości null (\0) i za pomocą litery z: \0\0\0\0z.
W tym przykładzie przedstawiono sposób użycia tego terminator pole dla xTable przykładową tabela. 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 pole muszą być określone w plik formatu.Przykład D używa innych niż XML plik formatu o nazwie Xmltable.fmt zawiera następujące czynności:
9.0
1
1 SQLBINARY 0 0 "\0\0\0\0z" 1 xCol ""
Umożliwia to plik formatu do dokumentów XML import zbiorczy do xTable tabela za pomocą bcp polecenie 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.Zbiorcza eksportowania danych XML
W poniższym przykładzie użyto bcp do masowych eksportowania danych XML z tabela, które utworzono w poprzednim przykładzie przy użyciu tego samego pliku w formacie XML. W następującej bcp polecenia, <server_name> i <instance_name> reprezentują symbole zastępcze, które muszą zostać zastąpione znakami odpowiednie wartości:
bcp bulktest..xTable out a-wn.out -N -T -S<server_name>\<instance_name>
Uwaga
SQL Server nie powoduje zapisania Kodowanie XML, gdy dane XML są 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]
See Also