【问题标题】:SSIS Transfer SQL Server Objects Task loses accents in transferred dataSSIS 传输 SQL Server 对象任务在传输的数据中丢失重音符号
【发布时间】:2024-01-18 18:40:01
【问题描述】:

我有一个带有传输 SQL Server 对象任务步骤的 SSIS 包,该步骤将表(架构和数据)从一个数据库传输到另一个数据库。 源数据库和目标数据库具有不同的排序规则。 (不知道是不是相关信息。)

在某些测试环境中,某些字符(匈牙利语重音字符:ő,ű)在传输过程中会转换为非重音字符 (o,u)。在其他测试环境中,一切都很好(匈牙利重音字符被很好地转移)。源表列是非 unicode (varchar),我们无法更改它,因为它是旧系统。

实验表明此行为取决于 Windows 区域设置(控制面板/区域和语言/管理/“非 Unicode 程序的语言”)。如果设置为匈牙利语,则一切正常,但如果设置为英语,则匈牙利口音会丢失。

问题是我无法强制执行特定的 Windows 语言环境设置,因此我正在寻找一种不依赖于 Windows 语言环境的正确方法。

有没有办法告诉 SSIS 在传输中使用匈牙利代码页?

【问题讨论】:

  • 只是在这里猜测,如果您更改流程会怎样。从传输对象步骤中排除包含匈牙利字符的表。然后在一个包中编写相同的传输逻辑。当您从表中提取数据时,而不是在下拉列表中选择表,编写自定义选择语句将该数据转换为 nvarchar 字段。这可能保留字符。如果你想看一个例子,我可以敲一个。
  • 我已经做了一个解决方法。删除了 SSIS,现在我正在使用一个存储过程,它通过链接服务器进行 INSERT INTO + SELECT。即使使用英语语言环境,也可以保留口音,所以没关系。但我还是很好奇它是否可以用 SSIS 制作。

标签: ssis codepages


【解决方案1】:

在Transer SQL Objects 任务的对象页面中,有一个名为UseCollat​​ion 的选项。如果您选择此选项,那么它应该使用酸数据的排序规则。

【讨论】:

  • 不幸的是它没有解决问题。目标列是使用源排序规则创建的,但匈牙利口音无论如何都丢失了。我猜当从源读取数据时,会发生从 Ascii 到 Unicode 的重音丢失转换。