【问题标题】:SQL Server Import and Export Wizard Error when exporting to PostgreSQL导出到 PostgreSQL 时出现 SQL Server 导入和导出向导错误
【发布时间】:2012-04-29 21:24:54
【问题描述】:

我正在尝试使用 SQL Server 的导入和导出向导 (SQL Server 2008 R2) 导出 SQL Server 数据库。数据库模式在目标 PostgreSQL 数据库中创建得很好,大多数数据也是如此。仅当我尝试导出第一行中具有 NULL 值的列时,它才会崩溃:

Error 0xc020844b: Data Flow Task 22: An exception has occurred during data insertion, the message returned from the provider is: Kan een object van het type System.Int32 niet converteren naar het type System.Char[]. (SQL Server Import and Export Wizard)

不幸的是,相关的例外是荷兰语,但它表示它无法将System.Int32 类型的对象转换为System.Char[]。原始 SQL Server 架构中的列类型在生成的 PostgreSQL 数据库中为 int 和 integer。

仅当第一行中的列的值为NULL 时才会发生这种情况。我认为它试图根据列的第一个值推断数据的类型,如果第一个值为NULL,则默认为System.Char[]。有没有办法改变这种行为,让数据的类型以与生成的 PostgreSQL 列的类型相同的方式推断出来(因为它正确地做到了)?

【问题讨论】:

  • 您可以尝试在 SQL Server 中将所有空值替换为虚拟值,并在迁移后将其替换回来。
  • @ErwinBrandstetter 是的,我可以这样做,但我希望有更简单的方法。
  • 你可以试一试,看看这是否确实是导致问题的原因。
  • @ErwinBrandstetter 如果我这样做确实有效,但我不得不这样做很烦人。

标签: sql-server database postgresql


【解决方案1】:

问题似乎不在 PostgreSQL 方面,因此您可能应该寻找转换工具来解决该错误。来自 psql:

test=# CREATE TABLE import (id int NOT NULL PRIMARY KEY, val1 int, val2 int);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "import_pkey" for table "import"
CREATE TABLE
test=# COPY import FROM STDIN (FORMAT CSV);
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1,,111
>> 2,22,222
>> \.
test=# SELECT * FROM import;
 id | val1 | val2 
----+------+------
  1 |      |  111
  2 |   22 |  222
(2 rows)

【讨论】:

  • 是的,问题出在 SQL Server 附带的转换工具上。我只是觉得奇怪的是,同一个工具正确地转换了数据库模式而不是数据。
猜你喜欢
  • 1970-01-01
  • 2010-12-27
  • 2015-03-05
  • 2018-06-13
  • 2014-08-25
  • 1970-01-01
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多