将XML插入SQL Server 2008数据库

时间:2010-09-02 15:54:17

标签: sql sql-server xml xmltextwriter

您好我正在尝试将一些XML数据插入到SQL Server 2008上的表中。但是我不断抛出此错误;

  

XML解析:第1行,第39个字符,无法切换编码

数据库列filemeta使用XML数据类型,我将编码切换为UTF-16,我认为这是添加XML数据所必需的。

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>');

帮助,我被困住了。

注意:我使用XMLTextWriter创建了XML。

3 个答案:

答案 0 :(得分:32)

是的,当您尝试将XML插入SQL Server 2008并且XML包含编码指令行时会出现问题。

我通常使用CONVERT函数来解决这个问题,它允许我指示SQL Server跳过这些指令 - 使用类似这样的东西:

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

它确实帮助我将各种编码的XML内容输入SQL Server。

请参阅MSDN docs on CAST and CONVERT - 在页面下方有一些样式可用于CONVERT XML及其中的一些解释。

答案 1 :(得分:18)

您只需在XML字符串前加上 N 即可使其成为unicode。

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>');

答案 2 :(得分:1)

这对我有用而没有任何错误:

DECLARE @input XML 
SET @input = 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>'

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