2015-10-06 37 views
1

我们有一个写入XML的过程(使用SQL的FOR XML)。当它通过SQLCMD在批处理文件中执行时,输出采用UTF-8格式(具体而言,8位ASCII字符变为2个字节)。 当我通过SSIS中的Execute SQL Command执行相同的操作时,它不是UTF-8编码。用于XML的TSQL导出实际的UTF-8编码数据

下面是一个简单的例子。的®应该成为2个字节:

SELECT 'Diversity® Certified' as fldAgentLastName 
FOR XML PATH('agent'), ELEMENTS, TYPE, ROOT('agents') 

的输出是:Diversity®认证

它应该是:Diversity®认证

并使用SQLCMD。我知道内部XML存储为UCS-2(?),但我需要一种方法来获得输出为UTF-8编码数据(不只是8位)。

我也不能使用我见过的BCP技巧。

我不想使用CDATA标记,因为那需要重新创建一个巨大的丑陋查询。

我在网上找到的所有东西都不会编码高ascii字符。

这是在SQL Server 2008 R2上运行的。

回答

0

我想我所要做的只是问,然后我会找到我自己的答案:问题不在于SQL,而在于SSIS下游。根据另一个线程中的回答,我将CONVERT的代码页以及最终的文本文件更改为65001:

...解决方法很简单,虽然违反直觉 - 在OLE DB Source和OLE DB Source之间添加数据转换转换步骤平面文件目标将您的输入“Dat”列从DT_NTEXT转换为DT_TEXT,代码页为65001.然后,将新转换的列直接提供给平面文件目标中的输出列。 ...问候,雅各布

http://www.sqlservercentral.com/Forums/Topic719421-149-1.aspx