Toplu alma ve verme xml belgeleri örnekleri

Yapabilirsiniz toplu alma xml belgeleri içine bir SQL Server veritabanı veya toplu vermek bunlardan bir SQL Server veritabanı.Bu konu, her ikisi de örnekleri sağlar.

İçin toplu alma verileri bir veri dosyasına bir SQL Server Tablo ya da görünüm, bölümlenmemiş aşağıdakileri kullanabilirsiniz:

  • BCP hizmet programı

    Ayrıca bcp yerden veri vermek için yardımcı içinde bir SQL Server bir deyim çalışır, bölümlenmiş görünümler gibi veritabanı

  • BULK INSERT

  • EKLE...SEÇİN * OPENROWSET(BULK...) DAN

Daha fazla bilgi için bkz: Bcp yardımcı programı kullanarak alma ve verme toplu veri ve Toplu veri bulk INSERT veya openrowset(bulk...) kullanarak alma.

Örnekler

Örnekler şunlardır:

  • A.TOPLU ikili bayt akışı olarak xml verileri alma

  • B.Varolan bir satır xml veri alma toplu

  • C.Toplu bir dtd içeren bir dosyadan xml verileri alma

  • D.Belirtme alan ayırıcısı açıkça bir biçim dosyası kullanma

  • E.Toplu xml verilerini dışa aktarma

A.Toplu ikili bayt akışı olarak xml verileri alma

Zaman, toplu alma , uygulamak istediğiniz bir kodlama bildirim içeren bir dosyadan xml verilerini openrowset(bulk…) yan tümce tümce tümcesinde SINGLE_BLOB seçeneği belirtin.SINGLE_BLOB seçeneği, yerleşimlere xml inceleyicisinde SQL Server alır verileri kodlama şemasını belirtilen xml bildirim.

Örnek tablo

Bir örneği test etmek için örnek tablo oluşturmak T.

USE tempdb
CREATE TABLE T (IntCol int, XmlCol xml)
GO

Örnek veri dosyası

Before you can run example A, you must create a UTF-8 encoded file (C:\SampleFolder\SampleData3.txt) that contains the following sample instance that specifies the UTF-8 encoding scheme.

<?xml version="1.0" encoding="UTF-8"?>
<Root>
          <ProductDescription ProductModelID="5">
             <Summary>Some Text</Summary>
          </ProductDescription>
</Root>

Örnek a

Bu örnek kullanır SINGLE_BLOB , seçenek bir INSERT ... SELECT * FROM OPENROWSET(BULK...) adlı bir dosyadan veri almak için deyim SampleData3.txt ve bir xml örneği tek bir sütun tabloda, örnek Tablo Ekle T.

INSERT INTO T(XmlCol)
SELECT * FROM OPENROWSET(
   BULK 'c:\SampleFolder\SampleData3.txt',
   SINGLE_BLOB) AS x

Açıklamalar

SINGLE_BLOB bu konuda kullanarak durum, xml belgesi (belirtildiği gibi kodlama bildirim xml) ve sunucu tarafından örtülü dize kod sayfası kodlama arasında bir uyumsuzluk önleyebilirsiniz.

Veri türleri nclob veya clob kullanın ve bir kod sayfası veya kodlama çakışma içine çalıştırırsanız, aşağıdakilerden birini yapmanız gerekir:

  • Başarıyla xml veri dosyasının içeriğini almak için xml bildirim kaldırın.

  • Bir kod sayfa, xml içinde kullanılan kodlama şemasını eşleşen sorgu codepage seçeneği belirtmek bildirim.

  • Eşleşen veya Unicode olmayan xml kodlama düzeni ile veritabanı harmanlama ayarlarını çözümlemek.

[Üst]

B.Varolan bir satır xml veri alma toplu

Bu örnek kullanır OPENROWSET Varolan bir satır veya satırları örnek bir xml örneği eklemek için bulk satır kümesi sağlayıcı tablo T.

Not

Bu örneği çalıştırmak için önce örnek a. sağlanan sınama komut dosyası tamamlamanız gerekirBu örnek oluşturur tempdb.dbo.T Tablo ve toplu veri alır SampleData3.txt.

Örnek veri dosyası

Örnek b değiştirilmiş bir sürüm kullanan SampleData3.txt örnek veri dosyasından önceki bir örnek.Bu örneği çalıştırmak için bu dosyanın içeriği aşağıdaki gibi değiştirin:

<Root>
          <ProductDescription ProductModelID="10">
             <Summary>Some New Text</Summary>
          </ProductDescription>
</Root>

Örnek 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

[Üst]

C.Toplu bir dtd içeren bir dosyadan xml verileri alma

Güvenlik notuGüvenlik Notu

xml ortamınızda gerekli olduğunda, belge tür tanımları (DTD'ler) desteğini etkinleştirmenizi değil öneririz.dtd desteğinin etkinleştirilmesinde sunucunuzun attackable yüzey alanı artar ve bir hizmet reddi saldırısı getirebilir.dtd desteği etkinleştirmeniz gerekir, yalnızca güvenilen xml belgeleri işleyerek bu güvenlik riski azaltabilirsiniz.

Kullanma denemesi sırasında bir bcp komutu, aşağıdakine benzer bir hata oluşabilir bir dtd içeren bir dosyadan xml verilerini içe aktarmak için:

"SQLState 42000, NativeError = = 6359"

"Hata = [Microsoft] [sql Server Native Client] [sql Server] xml ayrıştırma alt küme küme kümeyle iç DTD'ler verilmiyor.Kullanım dönüştürme sınırlı iç alt küme küme etkinleştirmek için stil seçeneği ile 2 dtd destek."

"bcp kopya %s başarısız oldu"

Bu soruna geçici bir çözüm için xml kullanarak bir dtd içeren bir veri dosyasından veri alabilirsiniz OPENROWSET(BULK...) işlev ve belirterek CONVERT , seçenek SELECT yan tümce tümce tümce komutu.Komut için temel sözdizimi aşağıdaki gibidir:

INSERT ... SELECT CONVERT(…) FROM OPENROWSET(BULK...)

Örnek veri dosyası

Before you can test this bulk import example, create a file (C:\temp\Dtdfile.xml) that contains the following sample instance:

<!DOCTYPE DOC [<!ATTLIST elem1 attr1 CDATA "defVal1">]><elem1>January</elem1>

Örnek tablo

Örnek c T1 aşağıdaki tarafından oluşturulmuş örnek tablo CREATE TABLE deyim:

USE tempdb
CREATE TABLE T1(XmlCol xml);
GO

Örnek c

Bu örnek kullanır OPENROWSET(BULK...) belirtir ve CONVERT , seçenek SELECT alınan xml verilerini almak için yan tümce tümce Dtdfile.xml örnek olarak tablo T1.

INSERT T1
  SELECT CONVERT(xml, BulkColumn, 2) FROM 
    OPENROWSET(Bulk 'c:\temp\Dtdfile.xml', SINGLE_BLOB) [rowsetresults]

Sonra INSERT deyimini yürütür, dtd XML'den kaldırılır ve saklanan T1 tablo.

[Üst]

D.Belirtme alan ayırıcısı açıkça bir biçim dosyası kullanma

Aşağıdaki örnek toplu alma aşağıdaki xml belgesi gösterilmiştir Xmltable.dat.

Örnek veri dosyası

Belgede Xmltable.dat içeren iki xml değerleri, biri her satır.İlk xml değeri utf-16 kodlanmış ve ikinci değer utf-8 ile kodlanmış.

Bu veri dosyasının içeriğini aşağıdaki onaltılık döküm içinde gösterilir:

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*

Örnek tablo

Toplu alma veya bir xml belgesini dışa aktardığınızda, kullanmanız gereken bir alan ayırıcısı yapamazsınız belki görünen herhangi bir belgeyi; Örneğin, bir dizi dört boş değerlere (\0) harfinin ardından z: \0\0\0\0z.

Bu örnek için bu alan ayırıcısı kullanın gösterilmiştir xTable örnek tablo.Bu örnek tablo oluşturmak için aşağıdaki kullanın CREATE TABLE deyim:

USE tempdb
CREATE TABLE xTable (xCol xml);
GO

Örnek Biçim dosyası

Alan Sonlandırıcı olarak belirtilmelidir biçim dosyası.Örnek d kullanan xml olmayan biçim dosyası adlı Xmltable.fmt , aşağıdakileri içerir:

9.0
1
1       SQLBINARY     0       0       "\0\0\0\0z"    1     xCol         ""

Toplu alma xml belgelerine bu biçim dosyası kullanabilirsiniz xTable kullanarak tablo bir bcp komutunu veya bir BULK INSERT veya INSERT ... SELECT * FROM OPENROWSET(BULK...) deyim.

Örnek d

Bu örnek kullanır Xmltable.fmt biçim dosyası , bir BULK INSERT adlı xml veri dosyasının içeriğini almak için deyim Xmltable.dat.

BULK INSERT xTable 
FROM 'C:\Xmltable.dat'
WITH (FORMATFILE = 'C:\Xmltable.fmt');
GO

[Üst]

E.Toplu xml verilerini dışa aktarma

Aşağıdaki örnek bcp Toplu xml verileri dışa aynı xml kullanarak önceki örnekte oluşturulmuş tablo için biçim dosyası.Aşağıdaki bcp komutu, <server_name> ve <instance_name> uygun değerlerle değiştirilir tutucular temsil eder:

bcp bulktest..xTable out a-wn.out -N -T -S<server_name>\<instance_name>

Not

SQL Server xml verilerini veritabanında varlığını sürdüren, xml kodlama kaydetmez.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.

[Üst]