Udostępnij za pośrednictwem


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 noteSecurity 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]