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