【问题标题】:SSIS cannot convert between unicode and non-unicode string data typesSSIS 无法在 unicode 和非 unicode 字符串数据类型之间转换
【发布时间】:2016-05-25 21:33:27
【问题描述】:

我是SSIS 的新手,我被要求将数据从 Postgres 数据库迁移到 SQL。没有数据转换要求。但我遇到了早期的障碍。

我在我的机器上创建了一个System DSN 用于连接到 Postgres 数据库的 ODBC 驱动程序,并且连接正常。

在 SSIS 中,我创建了一个 ODBC 数据提供程序连接,并使用了我创建的 DSN。连接良好。然后我创建一个 ADO.Net 数据源,并选择我的源数据连接。我选择我希望此流从中提取的表,按 Preview,然后我会看到数据。都很好。

然后我创建一个 OLE DB 目标组件。我不能使用 ADO.Net 目标,因为我的字段之一是 'GEOMETRIC' 类型,而 SSIS 似乎对此有问题。 OLE DB 允许这样做。

我将 Source 连接到 Destination,然后打开 Destination 项目。我选择目标表,选择“映射”,一切都完美映射。

我关闭了那个屏幕,但我看到我的目标组件旁边有一个红叉。

“列“pid”不能在unicode和非unicode字符串之间转换 数据类型。”

我的数据库中的 ALL VARCHAR 字段似乎就是这种情况。我是否需要为我的数据库中的每个表和每个 VARCHAR 创建一个数据转换或其他东西?或者有没有办法解决这个问题?

【问题讨论】:

  • 只需添加数据转换任务并为每一列 Source Unicode 然后在数据转换任务中添加 DT_WSTR (列名,>)
  • 那么,在源和目标之间添加一个转换,添加所有列,无论是字符串还是 INT 等?但只需更改 DT_WSTR 列?
  • 没有。先搞清楚问题。首先了解哪个系统是 unicode (NVARCHAR),哪个是非 unicode (VARCHAR)。然后决定是否要保留它。
  • 在 SSIS 中查看“高级编辑器”时,源列都标记为“Unicode 字符串 [DT_WSTR]”。而目标表列类型为“字符串 [DT_STR]”。目的地是我们想要的类型。我们知道所有数据都应存储为 VARCHAR,因此不应更改目标 - 如果这有帮助?
  • 听起来确实需要将NVARCHAR 存储在SQL Server 数据库中。请注意,NVARCHAR 与 VARCHAR 的概念在 SQL Server 中与其他 DBMS 非常不同,因此有必要在不同的 DBMS 上使用不同的数据类型。

标签: sql-server postgresql unicode ssis


【解决方案1】:

要转换 Unicode 和非 Unicode 字符串数据类型,请使用数据转换任务,并为每个有问题的源 Unicode 添加 String[DT_STR]

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 2013-07-13
    • 2019-06-26
    • 1970-01-01
    • 2019-01-07
    • 2017-01-02
    • 1970-01-01
    • 2018-08-28
    • 2013-03-10
    相关资源
    最近更新 更多