导入Microsoft Access数据库时保留自动编号列的值

时间:2010-07-30 18:30:47

标签: sql ms-access identity autonumber

我尝试的是以编程方式将几个表从Microsoft SQL Server导入Microsoft Access。

每个SQL Server表都有一个标识列,以及相应的Access表,一个自动编号列。

现在我想生成SQL脚本以将数据从SQL Server复制到Access,并使autonumber colum与SQL Server中的值相同。

这可能吗?

从Access到SQL Server的另一种方式执行此操作时,使用SET IDENTITY_INSERT [MyTable] ON和更高版本SET IDENTITY_INSERT [MyTable] OFF可以非常轻松。

我发现Microsoft Access没有这样的声明。

此外,我尝试创建要导入的Access表,首先使用标识字段作为类型LONG导入,然后使用ALTER TABLE ... ALTER COLUMN语句切换到自动编号。我没有这样做。

所以我的问题:有没有办法实现我的目标?

3 个答案:

答案 0 :(得分:5)

如果您使用Insert Into并在MS Access中指定所有列名称,它应该可以正常工作。

我刚刚创建了一个具有以下结构的表

Id (autonumber)
Firstname (text)
Secondname (text)
Lastname (text)

我跑了这句话

docmd.RunSQL "insert into table2 (id, firstname, secondname, lastname) values (27, 'a', 'b', 'c')"

它工作并将27插入自动编号列

答案 1 :(得分:3)

假设您在MS Access数据库中可以看到SQL Server表(链接表)和MS Access表,以下是无代码执行此操作的过程。这些说明适用于Access 2013,因此虽然界面元素已移动,但这应该适用于2003年,2007年等。

您要导入的Access表应该没有任何数据。

  1. 关闭所有Access对象(表格,查询,报告等)
  2. 点击功能区上的数据库工具
  3. 可选:单击压缩和修复(这会将空表上的自动编号计数器设置为0)
  4. 点击菜单上的创建
  5. 点击功能区上的查询设计。 (“显示表格”对话框已打开)
  6. SQL Server源表添加到查询中。
  7. 关闭显示表格对话框。
  8. 点击功能区上的追加查询按钮。
  9. 选择要导入数据的Access表,然后单击“确定”。
  10. 在SQL Server表中,双击要导入的任何字段,或者如果所有列名都匹配并且要导入所有字段,请双击*字段。
  11. 对于添加到下方附加查询的每个字段,检查所有字段是否映射到Access表中的字段。如果没有,请在每个字段的附加到属性中,选择Access中应该从SQL Server接收数据的字段。
  12. 点击功能区上的运行按钮。
  13. Access会告诉您要追加的记录数量 - 您可以使用此信息来验证您是否获得了所有数据。

    如果您认为需要再次使用它来同步表格,则可以保存此查询。

    如果你想获得想象力,可以创建一个删除查询,删除访问表中的所有记录,然后创建一个按以下顺序运行所有内容的宏:

    1. 删除记录
    2. 压缩和修复数据库
    3. 从SQL Server运行导入

答案 2 :(得分:0)

秘诀是暂时取消分配自动编号作为主键。这样可以毫无困难地将自动编号字段添加到您的记录中(只需确保在附加时没有任何重复项,否则当您重新分配主键时会出现错误)。