2011-04-07 70 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' 
相关问题