代码之家  ›  专栏  ›  技术社区  ›  Uwe Keim Chand

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

  •  2
  • Uwe Keim Chand  · 技术社区  · 14 年前

    我尝试以编程方式从Microsoft SQL Server导入多个表到Microsoft Access。

    每个SQL Server表都有一个标识列,相应的访问表也有一个自动编号列。

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

    这有可能吗?

    当以另一种方式从访问SQL Server时,使用set非常容易 IDENTITY_INSERT [MyTable] ON 以后 SET IDENTITY_INSERT [MyTable] OFF .

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

    此外,我还尝试创建访问表,首先将标识字段作为类型导入到其中。 LONG 稍后使用 ALTER TABLE ... ALTER COLUMN 切换到自动编号的语句。我做不到。

    所以我的问题是: 有没有办法达到我的目标?

    3 回复  |  直到 9 年前
        1
  •  5
  •   Raj More    14 年前

    如果你使用 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插入到“自动编号”列中。

        2
  •  3
  •   James Revillini    10 年前

    假设在MS Access数据库中可以同时看到SQL Server表(链接表)和MS Access表,下面是在不使用代码的情况下执行此操作的过程。这些指令用于访问2013,因此,虽然接口元素已移动,但它应该适用于2003、2007等。

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

    1. 关闭所有访问对象(表、查询、报表等)
    2. 点击 数据库工具 在缎带上。
    3. 可选的: 点击 压缩和维修 (这会将空表上的自动编号计数器设置回0)
    4. 点击 创造 菜单上。
    5. 点击 查询设计 在缎带上。(显示表格对话框打开)
    6. 添加 SQL Server源表 查询。
    7. 关闭 显示表 对话框。
    8. 单击 追加查询 功能区上的按钮。
    9. 选择访问表 要导入到其中的 数据并单击确定。
    10. 在SQL Server表中,双击要导入的任何字段,或双击 * 字段,如果所有列名称都匹配,并且要导入所有字段。
    11. 对于添加到下面的追加查询中的每个字段, 检查所有字段是否映射到访问表中的字段 . 如果不是,在 添加到 每个字段的属性,选择Access中应该从SQL Server接收数据的字段。
    12. 单击 功能区上的按钮。

    Access将告诉您要附加多少记录—您可以使用这些信息来验证您是否获取了所有数据。

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

    如果您想花哨点,可以创建一个删除查询,删除访问表中的所有记录,然后创建一个按以下顺序运行所有内容的宏:

    1. 删除记录
    2. 压缩和修复数据库
    3. 从SQL Server运行导入
        3
  •  0
  •   Adarsh Madrecha    9 年前

    秘密是暂时取消将自动编号分配为主键。这允许将自动编号字段添加到记录中而不会出现任何问题(只需确保在添加时没有任何重复项,否则在重新分配主键时会出现错误)。