将XML插入SQL Server 2008数据库

32

你好,我正在尝试将一些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>');

帮帮我,我卡住了。

NB:我是用XMLTextWriter创建的XML。

3个回答

37

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

我通常使用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文档中关于CAST和CONVERT的内容-页面下方有许多包含XMLCONVERT样式以及一些相关解释。


5
这可能是整个 SQL XML 故事中最棘手的错误:将显式编码声明与从字符串类型(ASCII 或 Unicode)派生的隐式编码混合。对于这个问题,任何凡人都无法胜任... - Remus Rusanu

21

您只需在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>');

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接