2012-04-18 210 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