Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSIS将XML输出到UTF-8_Sql Server_Xml_Ssis - Fatal编程技术网

Sql server SSIS将XML输出到UTF-8

Sql server SSIS将XML输出到UTF-8,sql-server,xml,ssis,Sql Server,Xml,Ssis,我正在使用SQL Server 2014\SSIS 我有一个包含OLE源和平面文件目标的数据流任务。 OLE源执行SQL命令: 声明@XMLOutput XML 声明@XMLOutputChar nvarcharmax ;使用XMLNAMESPACES'http://www.w3.org/2001/XMLSchema-instance"作为xsi,, 违约'http://www.example.com' 选择@XMLOutput= 选择 ISNULLRTRIMT1。[JobID],作为JobID

我正在使用SQL Server 2014\SSIS

我有一个包含OLE源和平面文件目标的数据流任务。 OLE源执行SQL命令:

声明@XMLOutput XML 声明@XMLOutputChar nvarcharmax ;使用XMLNAMESPACES'http://www.w3.org/2001/XMLSchema-instance"作为xsi,, 违约'http://www.example.com' 选择@XMLOutput= 选择 ISNULLRTRIMT1。[JobID],作为JobID, 从[tblJobFile]T1 对于XML路径“Job”,键入根“JobLoader” 设置@XMLOutputChar=+CONVERTnvarcharmax,@XMLOutput 选择@XMLOutputChar作为XMLOutput 如您所见,我正在将输出设置为UTF-8

此外,平面文件目标还勾选了Unicode框

但是,如果我打开在Notepad++中创建的一个XML文件,它会声明编码是UCS-2 LE BOM,而不是UTF-8


我遗漏了什么?

您遗漏了SQL Server不支持UTF-8,2019年将有一些,但这仍然不会影响此场景。添加一个XML处理指令不会突然让事情变得如此。XML类型始终使用UTF-16。我不确定您是否可以轻松地在SSIS中进行编码转换-这当然是很困难的,因为它可以运行任意的.NET代码,但无论如何都必须在SQL Server之外进行。尝试使用返回类型NVARCHARMAX-SSIS可能根本不愿意转换XML。我相信,在所有环境中都是这样,而不仅仅是SQL Server。当XML加载到内存中时,它将使用环境中的任何字符串规则进行存储。只有当它输出到一个文件时,声明的编码才起作用,并且只有当进行输出的东西知道XML业务时,例如XML序列化程序。您的代码段返回一个字符串,它不再是XML,而将该字符串输出到文件中的东西只会将整个字符串从环境对字符串UTF-16的编码转换为对文件UTF-16的编码。我没有注意到返回类型已经是NVARCHARMAX,假设您使用@XMLOutputChar作为传递给SSIS的结果,以便我上一条注释的最后一部分可以被删除忽略。其余部分仍然适用-SSIS接收UTF-16的值,并将其存储为UTF-16。好的,多亏了你们两位,它才有帮助。您不知道SQL Server不支持UTF-8,2019年将有一些,但这仍然不会影响此场景。添加一个XML处理指令不会突然让事情变得如此。XML类型始终使用UTF-16。我不确定您是否可以轻松地在SSIS中进行编码转换-这当然是很困难的,因为它可以运行任意的.NET代码,但无论如何都必须在SQL Server之外进行。尝试使用返回类型NVARCHARMAX-SSIS可能根本不愿意转换XML。我相信,在所有环境中都是这样,而不仅仅是SQL Server。当XML加载到内存中时,它将使用环境中的任何字符串规则进行存储。只有当它输出到一个文件时,声明的编码才起作用,并且只有当进行输出的东西知道XML业务时,例如XML序列化程序。您的代码段返回一个字符串,它不再是XML,而将该字符串输出到文件中的东西只会将整个字符串从环境对字符串UTF-16的编码转换为对文件UTF-16的编码。我没有注意到返回类型已经是NVARCHARMAX,假设您使用@XMLOutputChar作为传递给SSIS的结果,以便我上一条注释的最后一部分可以被删除忽略。其余部分仍然适用-SSIS将值作为UTF-16接收,并将其存储为UTF-16。好的,多亏了你们两位,这很有帮助。