2010-09-02 15 views
22

Merhaba SQL Server 2008'deki bir tabloya bazı XML verilerini eklemeye çalışıyorum. Ancak bu hatayı atmaya devam ediyorum;INSERT XML, SQL Server 2008 veritabanına

XML ayrıştırma: 1. satır, kodlama

veritabanı sütun filemeta XML veri türü kullanır ve ben inanıyorum UTF-16 kodlaması geçiş ettik geçiş yapamıyorsunuz karakter 39, XML veri eklemek için gerekli.

INSERT INTO testfiles 
    (filename, filemeta) 
VALUES 
    ('test.mp3', '<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>'); 

Yardım, takılıyorum.

NB: XML'i XMLTextWriter ile oluşturdum.

cevap

28

Evet, SQL Server 2008'e XML eklemeye çalıştığınızda sorunlar var ve XML kodlama komut satırı içeriyor.

Ben genellikle beni bu talimatları atlamak için SQL Server talimat verir CONVERT işlevini kullanarak etrafında olsun - böyle bir şey kullanın:

INSERT INTO testfiles 
    (filename, filemeta) 
VALUES 
    ('test.mp3', CONVERT(XML, N'<?xml version="1.0" encoding="utf-16" standalone="yes"?>......', 2)); 

Beni kesinlikle SQL Server içine çeşitli kodlanmış XML şeyler olsun yardımcı oldu.

MSDN docs on CAST and CONVERT'a bakın - sayfanın biraz aşağısındaile XML için kullanabileceğiniz çeşitli stiller ve bunlar hakkında bazı açıklamalar vardır.

+4

+1 bu muhtemelen tüm SQL XML hikaye trickiest hatadır: Örtülü kodlama türemiş biçim dizesi tipi (ASCII veya birlikte açık Kodlama bildirimleri karıştırma Unicode). Ölümcül, buna karşı bir şansı yok ... –

+1

Çok güzel çalışıyor, çok teşekkür ederim! – wonea

18

Sadece unicode yapmak için XML dizgenizin önüne N eklemeniz gerekir.

INSERT INTO testfiles 
    (filename, filemeta) 
VALUES 
    ('test.mp3', N'<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>'); 
+0

Yup, bu benim için gereken her şey. Çok teşekkürler! – Richard

0

Bu hataları olmadan benim için çalıştı:

DECLARE @input XML = '<?xml version="1.0" encoding="utf-16" standalone="yes"?><!--This is a test XML file--><filemeta filetype="Audio"><Comments /><AlbumTitle /><TrackNumber /><ArtistName /><Year /><Genre /><TrackTitle /></filemeta>' 

INSERT INTO testfiles(filename, filemeta) 
VALUES ('test.mp3',@input);