我正在尝试从Access 2010升级到SQL Server 2008.除了一个表外,所有功能都在运行。该表在SQL Server中创建,但没有数据升迁。原因是,一列包含一个日期,该日期存储在Access中,采用英国格式(例如2013年12月31日)。我知道这是真的,因为a)导出到文本文件也失败了该日期列,并且错误消息明确地说它是因为“日期超出范围”,但更多的是,b)如果我删除来自Access的列,并执行升迁,数据变大。所以毫无疑问,问题实际上是日期栏。
是的,我知道SSMA(SQL Server迁移助手),由于升迁向导的缺点,它似乎已经发展。 SSMA似乎不适合我。我在64位Windows 7机器上,当我试着沿着这条路走下去时,我进入了一个无限循环的“你没有正确版本的SSMA / Access”等; “你需要安装64位版本的Office”等;那不是一个选择。
令人讨厌的是,升迁向导无法处理英国约会,但情况似乎如此。所以我想找出一个解决方法。我不是Access专家。我想到的想法包括:
将表格导出到制表符分隔的文本文件,然后使用SSIS进行迁移,并进行派生列转换以获取数据
在Access中的表上创建计算字段,将数据导入新列,并删除原始列。 (但是,令人讨厌的是,这也不起作用;当我按照the instructions from MS并且它说“Access显示表达式构建器”时,那么...... Access不会显示表达式构建器。
任何建议表示赞赏,谢谢
答案 0 :(得分:0)
我想出了一个丑陋的手动黑客。毫无疑问,VBA专家会知道有许多更优雅的程序化解决方案,但我现在有更大的鱼来煎炸,而且只有一个日期列导致了我的问题。但我确实学到了一些关于Access的东西。我会在这里分享黑客的价值。
表达式构建器不会出现,因为它是一个旧的(Access 2000).MDB文件。我将其转换为.accdb格式(Save& Publish,在Access 2010中,允许您转换)。然后表达式构建器可用于表上的计算字段。
我创建了四个计算字段;一个用于每个日期部分,一个最终文本字段用于连接它们;然后我创建了第五个(文本)列,并手动复制数据表视图中的值(我告诉你这是一个黑客攻击)。计算列的表达式是(假设前三个计算列被称为'TheYear','TheMonth'和'TheDay'):
年份([TheBritishDate])
月([TheBritishDate])
天([TheBritishDate])
然后是连接列表达式,它是一个计算的文本列,带有几个IIF表达式来处理单个数字值(因为在Access中似乎没有任何“PAD”函数):
[的某些地方] + ' - ' + IIF(LEN([TheMonth])= 2,[TheMonth], '0' + [TheMonth])+ ' - ' + IIF(LEN([TheDay])= 2, [TheDay], '0' + [TheDay])
这将生成一个日期格式类似于SQL的文本字段:例如'2013-12-31'。
然后我只是将表格中的列,Ctrl-C和Ctrl-V选中到一个新的空文本列中。然后删除原始违规列和计算列。最终结果是格式正确的(文本)列,然后可以无误地升迁,并根据需要在T-SQL中进行操作。