导入 Microsoft Access 数据库时保留自动编号列的值
Posted
技术标签:
【中文标题】导入 Microsoft Access 数据库时保留自动编号列的值【英文标题】:Keep value of autonumber column when importing into Microsoft Access database 【发布时间】:2010-07-30 18:30:46 【问题描述】:我尝试以编程方式将多个表从 Microsoft SQL Server 导入 Microsoft Access。
每个 SQL Server 表都有一个标识列,相应的 Access 表也有一个自动编号列。
现在我想生成 SQL 脚本以将数据从 SQL Server 复制到 Access,并使自动编号列与 SQL Server 中的值相同。
这可能吗?
当从 Access 到 SQL Server 以其他方式执行此操作时,使用 SET IDENTITY_INSERT [MyTable] ON
和后来的 SET IDENTITY_INSERT [MyTable] OFF
相当容易。
我发现Microsoft Access没有这样的声明。
此外,我尝试创建要导入的 Access 表,首先使用身份字段作为类型 LONG
,然后使用 ALTER TABLE ... ALTER COLUMN
语句切换到自动编号。我这样做失败了。
所以我的问题是:有什么方法可以实现我的目标吗?
【问题讨论】:
为什么要复制数据?您可以使用从 Access 到数据库的 ODBC 连接... 这是我们产品的数据库迁移向导。 【参考方案1】:如果您使用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 插入到自动编号列中
【讨论】:
你的绝对正确。非常感谢您指出!现在它正在工作,这似乎是最明显的事情,但如果没有你的有用答案,我永远不会找到这个解决方案。 我在几天前发帖解释了 Autonumbers 为何如此:***.com/questions/3366086/…。这是一个经常引起混淆的根源,当你停下来思考它时,它实际上是很清楚的。【参考方案2】:假设您可以在 MS Access 数据库中同时查看 SQL Server 表(链接表)和 MS Access 表,以下是无需代码即可执行此操作的过程。这些说明适用于 Access 2013,因此虽然界面元素已移动,但这应该适用于 2003、2007 等。
您要导入的 Access 表中不应包含任何数据。
-
关闭所有 Access 对象(表、查询、报告等)
点击功能区上的数据库工具。
可选:点击压缩和修复(这会将空表上的自动编号计数器设置回 0)
点击菜单上的创建。
单击功能区上的查询设计。 (显示表格对话框打开)
将 SQL Server 源表添加到查询中。
关闭显示表格对话框。
点击功能区上的追加查询按钮。
选择要导入数据的 Access 表,然后单击“确定”。
在 SQL Server 表中,双击要导入的任何字段,或者如果所有列名都匹配并且要导入所有字段,则双击
*
字段。
对于添加到下面追加查询的每个字段,检查所有字段是否映射到 Access 表中的字段。如果没有,请在每个字段的 附加到 属性中,选择 Access 中应从 SQL Server 接收数据的字段。
点击功能区上的运行按钮。
Access 会告诉您要附加多少记录 - 您可以使用此信息来验证您是否获得了所有数据。
如果您认为需要再次使用它来同步表,可以保存此查询。
如果你想变得花哨,你可以创建一个删除查询来删除访问表中的所有记录,然后创建一个宏来按此顺序运行所有内容:
-
删除记录
压缩和修复数据库
从 SQL Server 运行导入
【讨论】:
【参考方案3】:秘诀是暂时取消将自动编号分配为主键。这允许将自动编号字段附加到您的记录中而不会遇到任何麻烦(只需确保在附加时没有任何重复项,否则当您重新分配主键时会出错)。
【讨论】:
以上是关于导入 Microsoft Access 数据库时保留自动编号列的值的主要内容,如果未能解决你的问题,请参考以下文章
在 Mac 上从 Microsoft Access 文件导入数据
Microsoft Access Runtime 2013 - 从 Excel 导入
Microsoft Office Access数据库或项目包含一个对文件“dao360.dll”版本5.0的丢失?请问你是如何处理的,