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 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
Yantümcesi (Transact-sql) seçin
Kavramlar
Toplu alma ve verme veri (SQL Server)
DEL - Implementing XML in SQL Server