2013-07-15 110 views
0

我试图从Access 2010升迁到SQL Server 2008.所有的工作除了一个表;该表在SQL Server中创建,但没有数据变大。原因是,一个列包含一个日期,存储在Access中的日期是英国格式(例如2013年12月31日)。我知道这是真实的,因为a)导出到文本文件也失败与该日期列,错误消息明确表示,这是因为“日期超出范围”,但更重要的是,b)如果我删除来自Access的列,并进行升迁,数据得到升迁。所以毫无疑问,问题实际上就是日期栏。升级访问SQL英国与美国的日期格式

是的,我知道SSMA(SQL Server迁移助理),这似乎是由于升迁向导的缺点而演变而来的。 SSMA似乎不适合我。我在一台64位的Windows 7机器上,当我试图走上这条路时,我陷入了无休止的“你没有正确版本的SSMA/Access”等等; “你需要安装64位版本的Office”等;这不是一个选项。

令人烦恼的是,升迁向导无法处理英国的日期,但似乎是这样。所以我试图找出一个解决方法。我不是Access专家。发生在我的想法包括:

  • 导出表的制表符分隔文本文件,然后使用SSIS迁移它,做一个派生列转换来获取数据

  • 创建一个计算在Access中的表中的字段,将数据获取到新列中,并删除原始列。 (不过,也烦人,这不是任何工作。我跟随the instructions from MS和它说:“Access显示表达式生成器”,以及...访问不显示表达式生成器

赞赏任何建议,谢谢

+0

你能找到一个32位的机器来运行SSMA吗? –

回答

0

我想出了一个丑陋的手动破解程序,毫无疑问VBA专家会知道有很多更优雅的程序化解决方案,但我现在有更大的鱼来炒,而且只有一个日期列是但是我确实学到了一些关于Access的东西,我会在这里分享它的价值,无论它的价值如何,

  • 表达式生成器不会出现,因为它是旧的(Access 2000).MDB文件。我将它转换为.accdb格式(保存&发布,在Access 2010中,可让您转换)。然后,表达式构建器可用于表中的计算字段。

  • 我创建了四个计算字段;一个用于每个日期部分,一个用于连接它们的最终文本字段;然后我创建了第五个(文本)列,并手动复制数据表视图中的值(我告诉你这是一个黑客攻击)。为计算列的表达水平(假设前三计算的列被称为 '的某些地方', 'TheMonth' 和 'TheDay'):

年([TheBritishDate])
月([TheBritishDate] )
Day([TheBritishDate])

然后,连接列表达式(这是一个计算文本列)和一些IIF表达式来处理单个数字值(因为似乎没有任何“PAD “Access中的函数):

[TheYear] +' - '+ IIf(Len( [TheMonth])= 2,[TheMonth],'0'+ [TheMonth])+' - '+ IIf(Len([TheDay])= 2,[TheDay],'0'+ [TheDay])

这产生一个像SQL这样的日期格式的文本字段:例如'2013-12-31'。

然后,我只是选择表中的列Ctrl-C和Ctrl-V到一个新的空白文本列。然后删除原始的违规列和计算的列。最终的结果是一个格式正确的(文本)列,然后可以升级而不出错,并根据需要在T-SQL中进行操作。

相关问题