Aracılığıyla paylaş


Alma ve XML belgeleri verme toplu örnekleri

toplu alma XML belgelerine için birSQL Serververitabanı ya da toplu vermek bunlardan birSQL Serververitabanı.Bu konu, her ikisi de örnekleri sağlar.

Bir veri dosyasına toplu alma verileri için birSQL ServerTablo ya da olmayan bölümlenmiş görünüm, aşağıdakileri kullanabilirsiniz:

  • Kullanımıbcp yardımcı

    AyrıcaKullanımıbcp yardımcı programı, herhangi bir yerden veri vermek için SQL Serververitabanı bölümlenmiş görünümler içeren bir deyim çalışan

  • TOPLU EKLEME

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

Daha fazla bilgi için bkz:Kullanımıbcp yardımcı programı'nı kullanarak alma ve verme toplu veriveBULK INSERT veya OPENROWSET(BULK...) kullanarak toplu veri alınıyor.

Örnekler

Örnekler şunlardır:

  • C.İkili bayt akışı olarak XML verilerini içe aktarma toplu

  • B.Varolan bir satır XML verileri içe aktarma toplu

  • C.DTD içeren bir dosyadan XML verilerini içe aktarma toplu

  • D.Açık bir biçim dosyası kullanarak alan ayırıcısı belirtme

  • E.XML verilerini dışa aktarma toplu

C.İkili bayt akışı olarak XML verilerini içe aktarma toplu

Uygulamak istediğiniz bir kodlama bildirim içeren bir dosyadan XML verilerini içe aktarma toplu, OPENROWSET(BULK…) yan SINGLE_BLOB seçeneğini belirleyin.SINGLE_BLOB seçenekle emin, XML Ayrıştırıcısı,SQL Serveralır verileri kodlama şemasını belirtilen XML bildirim.

Örnek tablo

Bir örneği test etmek için gereken oluşturduğunuz örnek tabloT.

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

Örnek veri dosyası

Örnek bir çalıştırmadan önce UTF-8 olarak kodlanmış dosya oluşturmanız gerekir ( C:\SampleFolder\SampleData3.txt) belirten aşağıdaki örnek kopyasını içerenUTF-8kodlama düzeni.

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

Bir örnek

Bu örneğin kullandığıSINGLE_BLOBseçeneği, birINSERT ... SELECT * FROM OPENROWSET(BULK...)Tablo adında bir dosyadan veri almak içinSampleData3.txtve bir XML örneği tek sütunlu tabloda örnek tabloT.

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

Açıklamalar

SINGLE_BLOB bu durumda kullanarak, XML belgesini (belirtildiği gibi kodlama bildirim XML) ve sunucu tarafından örtülü dize kod kodlama arasında bir uyumsuzluk önleyebilirsiniz.

NCLOB veya CLOB veri türleri kullanın ve kod sayfası veya kodlama çakışması, aşağıdakilerden birini yapmanız gerekir:

  • XML bildirim almak için içeriğini başarıyla kaldırma XML veri dosyası.

  • Bir kod sayfa XML bildirim. kullanılan kodlama şemasını eşleşen sorgu CODEPAGE seçeneğini belirleme

  • Eşleşen veya çözmek, veritabanı harmanlama ayarlarına sahip bir Unicode XML kodlama düzeni.

[Üst]

B.Varolan bir satır XML verileri içe aktarma toplu

Bu örneğin kullandığıOPENROWSETVarolan bir satır veya satırları örnek tablo için bir XML örneği eklemek için toplu satır kümesi sağlayıcıT.

Not

Bu örneği çalıştırmak için ilk örnekte a sağlanan sınama komut dosyasını tamamlamanız gerekirOluşturur, örneğintempdb.dbo.TTablo ve toplu veri alırSampleData3.txt.

Örnek veri dosyası

Örnek B değiştirilmiş sürüm kullananSampleData3.txtörnek veri dosyası önceki ö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.DTD içeren bir dosyadan XML verilerini içe aktarma toplu

Security noteSecurity Note:

XML çalışma ortamınızda gerekli, belge tür tanımları (DTD'ler) desteğini etkinleştirme, önerilir.DTD desteğini açma sunucunuz attackable yüzey alanını artırır ve bir hizmet reddi saldırılarına karşı neden.DTD desteği etkinleştirmeniz gerekir, yalnızca güvenilen XML belgeleri işleyerek bu güvenlik riskini azaltabilirsiniz.

Kullanma girişimi sırasında birKullanımıbcp komutu, aşağıdakine benzer bir hata oluşabilir, DTD içeren bir dosyadan XML verilerini almak için:

"SQLState 42000 NativeError = = 6359"

"Hata = [Microsoft Office 2010 Suite] [SQL Server Native istemci] [SQL Server] ayrıştırma XML'de iç alt küme küme kümedeki DTD izin verilmiyor.Kullanım CONVERT 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 sorunu gidermek için XML verilerini kullanarak bir DTD içeren bir veri dosyasından alabilirsinizOPENROWSET(BULK...)işlev ve ardından belirterekCONVERTseçeneği,SELECTyan komutu.Komut için temel sözdizimi aþaðýdadýr:

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

Örnek veri dosyası

Bu toplu alma örneği test etmek için önce bir dosya oluşturun ( C:\temp\Dtdfile.xml) içeren aşağıdaki örnek örnek:

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

Örnek tablo

Örnek C kullananT1aşağıdaki tarafından oluşturulmuş örnek tabloCREATE TABLEdeyim:

USE tempdb
CREATE TABLE T1(XmlCol xml);
GO

Örneğin C

Bu örnek kullanırOPENROWSET(BULK...)veCONVERTseçeneği,SELECTXML verilerini almak için yan tümceDtdfile.xmlörnek tablo içineT1.

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

SonraINSERTdeyimini yürütür, DTD'nin XML çıkarılır ve depolananT1Tablo.

[Üst]

D.Açık bir biçim dosyası kullanarak alan ayırıcısı belirtme

Aşağıdaki örnek, toplu alma için aþaðýdaki XML belgesini gösterirXmltable.dat.

Örnek veri dosyası

Belge içindeXmltable.datiçin her satırda bir tane iki XML verileri içerenUTF-16 ile kodlanmış ilk XML değeri ve ikinci değer UTF-8 ile kodlanır.

Bu veri dosyasının içeriğini aşağıdaki onaltılık döküm 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 belgesine vermek, kullanmanız gereken biralan ayırıcısı , büyük olasılıkla tüm belgelerin bulunamaz; örneğin, bir dizi dört boşluk ( \0) harfi ve ardından z: \0\0\0\0z.

Bu örnek için bu alan ayırıcısı nasıl gösterirxTableörnek tablo.Bu örnek tablo oluşturmak için aşağıdakileri kullanınCREATE TABLEdeyim:

USE tempdb
CREATE TABLE xTable (xCol xml);
GO

Örnek biçim dosyası

Yer alan ayırıcısı belirtilmelidir biçim dosyası.Örnek D non-XML kullanan biçim dosyası adlıXmltable.fmt, aşağıdakileri içerir:

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

Bu biçim dosyası toplu alma XML belgelerine kullanabileceğinizxTablekullanarak tablo birbcpkomutu veyaBULK INSERTorINSERT ... SELECT * FROM OPENROWSET(BULK...)deyim.

Örnek D

Bu örneğin kullandığıXmltable.fmtbiçim dosyası in aBULK INSERTdeyim adlı XML veri dosyasının içeriğini almak içinXmltable.dat.

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

[Üst]

E.XML verilerini dışa aktarma toplu

Aşağıdaki örnekbcptoplu olarak dışa aktarma için tablonun aynı XML kullanarak önceki örnekte oluşturulan XML verileri biçimlendirme.Aşağıdakibcpkomutu<server_name>ve<instance_name>uygun değerleri yerine yer tutucuları gösterir:

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

Not

SQL Server XML verileri veritabanında kalıcıdır, 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]