从SQL Server 2016 UTF-8编码导出XML文件而不是bom

时间:2017-01-31 15:07:35

标签: sql-server xml encoding utf-8 sql-server-2016

正如您现在可能在Microsoft SQL Server 2016中最终支持UTF-8

我想知道如何从UTF-8编码且没有bom的存储过程创建XML文件。

在SQL Server 2016技术概述中,它说明了以下内容:

  

支持UTF-8数据的导入和导出

     

现在可以使用BULK INSERT T-SQL命令和bcp命令行实用程序将存储在UTF-8编码文件中的数据导入SQL Server并从SQL Server导出为UTF-8编码文件。作为导入过程的一部分,从文件中读取UTF-8编码的字符串,并将其转换并存储为与SQL Server表中的目标列对应的本机数据类型。作为导出过程的一部分,数据从本机数据类型转换为UTF-8编码字符串并写入文件。除Xml,SqlVariant,Text,NText和Image之外,支持所有本机数据类型。

根据我的理解,我现在可以使用以下命令创建一个UTF-8文件:

declare @command varchar(8000)

set @command = 'bcp "select * from Table" queryout 
"{path}"  -T -t; -c -C65001'

exec xp_cmdshell @command

但我不知道如何从“FOR XML”查询创建文件。另外,我不知道生成的文件是否会带有BOM。

在谷歌搜索半小时后我找不到任何答案,所以我试图在这里找到答案。

谢谢!

1 个答案:

答案 0 :(得分:1)

我会自己写一个迷你工具......

在下面我写C#,但这对大多数高级编程语言都有效:

  • C#可以调用返回XML(SELECT ... FOR XML ...)而没有任何问题的查询
  • 来自SQL Server的C#xml映射到字符串。
  • C#能够将此字符串转换为您需要的任何格式
  • C#可以将其写入允许写入的任何位置
  • C#可以执行此计时器驱动,也可以使用作业

SQL Server在写入文件系统方面非常有限。你当然可以使用SSIS ......

如果你在.Net中这样做,你甚至可能将其作为程序集包含到数据库中并使用T-SQL语句调用它。