代码之家  ›  专栏  ›  技术社区  ›  wonea Ilya Smagin

将XML插入SQL Server 2008数据库

  •  25
  • wonea Ilya Smagin  · 技术社区  · 14 年前

    您好,我正在尝试将一些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 回复  |  直到 6 年前
        1
  •  32
  •   John Woo    7 年前

    是的,尝试将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 -页面下方有一些样式可以用于 转换 具有 XML 还有一些关于它们的解释。

        2
  •  18
  •   Joe Stefanelli    14 年前

    你只需要包括 n 在XML字符串前面使其成为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>');
    
        3
  •  1
  •   SimplyInk LuizLoyola    6 年前

    这对我很有效,没有任何错误:

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