Aracılığıyla paylaş


Toplu alma ve verme xml belgelerinin (SQL Server) örnekleri

Alma xml belgelerine toplu bir SQL Serververitabanı veya toplu verme onlardan bir SQL Serververitabanı. Bu konuda hem örnekleri sağlar.

Veri dosyasına veri Al toplu için bir SQL Servertablo veya görünüm, bölümlenmemiş birini kullanabilirsiniz:

  • bcpyardımcı programı

    Ayrıca bcpyerden verileri vermek yardımcı programı içinde bir SQL Serverbir select deyimi çalışır, bölümlenmiş görünümler de dahil olmak üzere veritabanı.

  • TOPLU EKLEME

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

Daha fazla bilgi için Alma ve verme toplu veri bcp yardımcı programını (SQL Server) kullanarakve Toplu veri bulk INSERT veya openrowset(bulk...) kullanarak alma (SQL Server).

Örnekler

Örnekler şunlardır:

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

  • B. Varolan satır xml veri alma toplu

  • C. dtd içeren bir dosyadan xml veri alma toplu

  • D. Açıkça bir biçim dosyası kullanma alan Sonlandırıcı belirtme

  • E. Toplu xml verilerini verme

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

Uygulamak istediğiniz bir kodlama bildirimi içeren dosya xml veri alma toplu openrowset(bulk…) yan tümcesinde SINGLE_BLOB seçeneği belirleyin. SINGLE_BLOB seçeneği emin yapar xml çözümleyici SQL Serverxml açıklamasında belirlenmiş kodlama düzenine göre veri alır.

Örnek tablo

Örnek a test etmek için örnek tablo oluşturmak T.

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

Örnek veri dosyası

Örnek a çalıştırmadan önce utf-8 kodlanmış dosyayı oluşturmanız gerekir (C:\SampleFolder\SampleData3.txt) belirten aşağıdaki örnek örneği içeren UTF-8kodlama düzeni.

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

Örnek a

Bu örnek kullanır SINGLE_BLOBiçinde seçenek bir INSERT ... SELECT * FROM OPENROWSET(BULK...)adlı bir dosyadan veri almak için deyimi SampleData3.txtve bir xml örneği tek 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 durumda kullanarak, xml belgesi (belirtildiği gibi kodlama bildirimi 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 bildirimi kaldırın.

  • Bir kod sayfası, xml bildiriminde kullanılan kodlama şemasını eşleşen sorgu codepage seçeneği belirtin.

  • Maç veya gidermek, veritabanı harmanlama ayarları ile Unicode olmayan xml kodlama düzeni.

[Üst]

B.Varolan satır xml veri alma toplu

Bu örnek OPENROWSETbir xml örneği varolan satır veya satırları örnek tablo eklemek için toplu satır kümesi sağlayıcı T.

[!NOT]

Bu örneği çalıştırmak için ilk a sağlanan sınama komut dosyası tam gerekir Bu örnek oluşturur tempdb.dbo.Ttablo ve toplu ithalat verilerinden SampleData3.txt.

Örnek veri dosyası

Örnek b, değiştirilmiş bir versiyonunu kullanır SampleData3.txtörnek veri dosyası önceki örneği. 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 veri alma toplu

Güvenlik notuGüvenlik Notu

xml ortamınızda gerekli değildir eğer size belge tür tanımları (DTD'ler) desteğini etkinleştirmemeniz önerilir. dtd desteğini açma sunucunuz attackable yüzey alanını artırır ve bir hizmet reddi saldırısına karşı karşıya bırakabilir. dtd desteği etkinleştirmeniz gerekir, yalnızca güvenilen bir xml belgeler işleyerek bu güvenlik riski azaltabilirsiniz.

Kullanma girişimi sırasında bir bcp komut aşağıdakine benzer bir hata oluşabilir bir dtd içeren bir dosyadan xml verilerini almak için:

"SQLState 42000 NativeError = 6359" =

"hata = [Microsoft] [SQL Server Native Client] [SQL Server] Parsing xml ile iç alt kümedeki DTD izin verilmez. Kullanım DÖNÜŞTÜRMEK sınırlı iç alt stil seçeneği ile 2 dtd destek."

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

Bu sorunu çözmek için xml kullanarak bir dtd içeren bir veri dosyasından veri alabilirsiniz OPENROWSET(BULK...)fonksiyonu ve belirterek CONVERTseçeneği de SELECTkomutu yan. Komut için temel sözdizimi şöyledir:

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

Örnek veri dosyası

Önce sen-ebilmek sınav bu toplu alma örnek, bir dosya oluşturun (C:\temp\Dtdfile.xml), aşağıdaki örnek örneği içerir:

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

Örnek tablo

Örnek c T1aşağıdaki tarafından oluşturulan örnek tablo CREATE TABLEdeyimi:

USE tempdb;
CREATE TABLE T1(XmlCol xml);
GO

Örnek c

Bu örnek kullanır OPENROWSET(BULK...)ve CONVERTseçeneği de SELECTalınan xml verilerini almak için yan Dtdfile.xmlÖrnek tabloya T1.

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

Sonra INSERTdeyimi yürütür, dtd XML'den çıkardı ve depolanan T1tablosu.

[Üst]

D.Açıkça bir biçim dosyası kullanma alan Sonlandırıcı belirtme

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

Örnek veri dosyası

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

Bu veri dosyasının içeriğini aşağıdaki onaltılık çöplükte 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 xml belgesini dışa aktardığınızda, kullanmanız gereken bir alan Sonlandırıcı cant belki görünen herhangi bir belge; Örneğin, bir dizi dört boş değerlere (\0) harfiyle takip z: \0\0\0\0z.

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

USE tempdb;
CREATE TABLE xTable (xCol xml);
GO

Örnek biçimi dosyası

Alan Sonlandırıcı biçimi dosyasında belirtilmelidir. d adli olmayan xml biçimi dosyası kullanır örnek Xmltable.fmtşunları içerir:

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

Toplu alma xml belgelerine Bu biçim dosyasını kullanabilirsiniz xTabletablo kullanarak bir bcpkomutu ya da bir BULK INSERTya INSERT ... SELECT * FROM OPENROWSET(BULK...)deyimi.

Örnek d

Bu örnek Xmltable.fmtbiçimi dosyasında bir BULK INSERTadlı bir xml veri dosyasının içeriğini almak için deyimi Xmltable.dat.

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

[Üst]

E.Toplu xml verilerini verme

Aşağıdaki örnek bcpiçin toplu verme xml verileri aynı xml biçimi dosyasını kullanarak önceki örnekte oluşturulmuş tablo. Aşağıdaki bcpkomutu, <server_name>ve <instance_name>uygun değerlerle değiştirilmelidir yer tutucuları gösterir:

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

[!NOT]

SQL Serverxml verilerini veritabanına kalıcı yaptığınızda xml kodlama kaydetmez. xml verisi verilirken bu nedenle, xml alanları özgün kodlama kullanılamaz. SQL Serverxml verisi verilirken utf-16 kodlamasını kullanır.

[Üst]

Ayrıca bkz.

Başvuru

Insert (Transact-sql)

Yantümcesi (Transact-sql) seçin

BCP yardımcı programı

BULK INSERT (Transact-SQL)

OPENROWSET (Transact-SQL)

Kavramlar

Toplu alma ve verme veri (SQL Server)

DEL - Implementing XML in SQL Server

Diğer Kaynaklar

Using Unicode with XML Data