0

我正在尝试从 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 中的表上创建计算字段,将数据放入新列,并删除原始列。(但是,同样令人讨厌的是,这也不起作用;当我按照MS 的说明进行操作时,它显示“Access 显示表达式生成器”,嗯……Access 不显示表达式生成器。

任何建议表示赞赏,谢谢

4

1 回答 1

0

我想出了一个丑陋的手动黑客。毫无疑问,有许多 VBA 专家会知道的更优雅的编程解决方案,但我现在有更大的鱼要炒,只有一个日期列给我带来了问题。但我确实学到了一些关于 Access 的东西。不管它值多少钱,我都会在这里分享这个技巧。

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

  • 我创建了四个计算字段;一个用于每个日期部分,一个用于连接它们的最终文本字段;然后我创建了第五个(文本)列,并手动复制了数据表视图中的值(我告诉过你这是一个 hack)。计算列的表达式是(假设前三个计算列称为“TheYear”、“TheMonth”和“TheDay”):

年([TheBritishDate])
月([TheBritishDate])
日([TheBritishDate])

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

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

这会生成一个日期格式类似于 SQL 的文本字段:例如“2013-12-31”。

然后我只是选择了表中的列,Ctrl-C,Ctrl-V 到一个新的空文本列中。然后删除原始违规列和计算列。最终结果是一个格式正确的(文本)列,然后可以在没有错误的情况下放大该列,并根据需要在 T-SQL 中进行操作。

于 2013-07-15T21:13:52.380 回答