2011-04-07 85 views
0

我正在將基於FoxPro的系統遷移到SQL Server 2005數據庫中。在FoxPro系統中,沒有值的日期字段顯示爲「/ /」。當我使用SQL Server導入/導出嚮導時,這些空白日期字段在生成的SQL Server表中被轉換爲'12/30/1899 12:00:00 AM'。將空的FoxPro日期字段導入到SQL Server 2005中

我的問題是:讓SQL Server將這些空白日期字段轉換爲NULL而不是1899日期的最簡單方法是什麼?我在挖掘導入/導出嚮導方面沒有運氣,並且我沒有足夠的SSIS包經驗來了解該大道是否有任何東西可以滿足我的需求。

我會在不同的時間導入大量的表格,因此解決方案越容易和可重複性越好。提前致謝!

回答

1

雖然我很欣賞這兩個建議給我,我最終找到更多的是「一,做」的解決方案,而不是在每個表運行查詢後,我將其導入。

我最終創建了一個SSIS包,並根據需要在源和目標之間插入派生列轉換。例如,在派生列轉換編輯器中,如果我有一個名爲'comp_date'的日期列,並且我可以肯定地說1910年前的任何日期都是無效的,那麼編輯器中的前幾列看起來就像這樣的:

Derived Column Name  Derived Column  Expression 
-------------------  --------------  ----------------------------------------- 
comp_date    Replace 'comp_date' DATEPART("year",comp_date) < 1910 ? NULL(DT_DATE):comp_date 

這樣一來,我只需要佔空轉換一次,當我在包配置它,然後不斷地添加到包的多個表得到扔進組合。這正是我需要的結果。再次感謝您的建議!

0

我會把它們作爲1899年的日期,並將它視爲代碼中的空白日期。通常情況下,比插入空日期時間更容易。

0

如果值1899-12-30T00:00:00永遠不會出現在列中,您可以在插入後更新值。

update YourTable 
set DateColumn = null 
where DateColumn = '1899-12-30T00:00:00' 
相關問題