2012-04-18 274 views
2

我想用SQL Server的导入导出向导(SQL Server 2008 R2)导出SQL Server数据库。数据库模式在目标PostgreSQL数据库中得到良好创建,大部分数据也一样。它只有当我尝试导出具有第一行中的NULL值的列崩溃:导出到PostgreSQL时SQL Server导入和导出向导出错

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数据库中的intinteger

这只发生在第一行的列值为NULL。我认为它试图根据列的第一个值推断数据的类型,如果第一个值是NULL,则默认为System.Char[]。有没有什么方法可以改变这种行为,并让数据的类型以与PostgreSQL列的类型相同的方式被推断(因为它正确地)?

+0

您可以尝试用SQL服务器中的虚拟值替换所有空值,并在迁移后将其替换回来。 – 2012-04-18 13:12:24

+0

@ErwinBrandstetter是的,我可以做到这一点,但我希望有更简单的方法。 – 2012-04-18 13:30:30

+0

你可以试试看看是否确实是导致问题的原因。 – 2012-04-18 14:02:15

回答

1

这个问题似乎并不在PostgreSQL方面,所以你应该可以期待转换工具的bug。来自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) 
+0

是的,问题出在SQL Server附带的转换工具中。我只是觉得奇怪的是,同一个工具正确转换数据库模式,但不是数据。 – 2012-04-18 18:12:23