我正在将基于FoxPro的系统迁移到SQL Server 2005数据库中。在FoxPro系统中,没有值的日期字段显示为“/ /”。当我使用SQL Server导入/导出向导时,这些空白日期字段将在生成的SQL Server表中转换为'12 / 30/1899 12:00:00 AM'。
我的问题是:SQL Server将这些空日期字段转换为NULL而不是1899日期的最简单方法是什么?我在挖掘导入/导出向导方面没有运气,而且我没有足够的SSIS包经验来了解该途径中的任何内容是否符合我的需求。
我将在不同时间导入大量表格,因此解决方案越简单,越可重复,越好。提前谢谢!
答案 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'