【问题标题】:Upsizing Access to SQL UK vs. US date formats扩大对 SQL 英国与美国日期格式的访问
【发布时间】:2013-07-15 16:45:29
【问题描述】:

我正在尝试从 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 不显示表达式生成器。

任何建议,谢谢你

【问题讨论】:

  • 你能找到一台 32 位机器来运行 SSMA 吗?

标签: sql-server upsizing


【解决方案1】:

我想出了一个丑陋的手动破解。毫无疑问,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'+[TheDay])

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

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

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多