将空的FoxPro日期字段导入SQL Server 2005

时间:2011-04-07 17:34:48

标签: sql-server-2005 date import null visual-foxpro

我正在将基于FoxPro的系统迁移到SQL Server 2005数据库中。在FoxPro系统中,没有值的日期字段显示为“/ /”。当我使用SQL Server导入/导出向导时,这些空白日期字段将在生成的SQL Server表中转换为'12 / 30/1899 12:00:00 AM'。

我的问题是:SQL Server将这些空日期字段转换为NULL而不是1899日期的最简单方法是什么?我在挖掘导入/导出向导方面没有运气,而且我没有足够的SSIS包经验来了解该途径中的任何内容是否符合我的需求。

我将在不同时间导入大量表格,因此解决方案越简单,越可重复,越好。提前谢谢!

3 个答案:

答案 0 :(得分: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

这样,当我在包中配置它时,我只需要考虑一次空转换,然后随着更多表被抛入混合中而不断添加到包中。这让我得到了我需要的结果。再次感谢您的建议!

答案 1 :(得分:0)

我将它们保留为1899年的日期,并将其视为代码中的空白日期。这通常是比插入空日期时更好的方法。

答案 2 :(得分:0)

如果在列中永远不会出现值1899-12-30T00:00:00,则可以在插入后更新值。

update YourTable
set DateColumn = null
where DateColumn = '1899-12-30T00:00:00'