将 MS ACCESS 数据库表导入 SQL Server
Posted
技术标签:
【中文标题】将 MS ACCESS 数据库表导入 SQL Server【英文标题】:Import MS ACCESS database tables into SQL server 【发布时间】:2020-04-09 14:22:33 【问题描述】:我正在尝试将 MS Access 表导入 SQL 服务器。
我尝试了两种方法:
1)当我按照 SQL server 中的步骤操作时 => 右键单击数据库名称 => 任务 => 导入数据...我将能够成功导入表。
(这是我提到的网站:https://help.avalara.com/Frequently_Asked_Questions/Rate_Files_FAQ/How_do_I_import_MS_Access_database_into_a_SQL_Server_database%3F)
但它正在删除所有主键和外键约束。
它只是导入表列而不是键约束。我希望将所有主键和外键应用于列,就像它在 MS Access 中一样。
2) 使用 SSMA(如本网站所示:https://support.office.com/en-us/article/migrate-an-access-database-to-sql-server-7bac0438-498a-4f53-b17b-cc22fc42c979)。但是 SSMA 版本和 SQL Server 不匹配,我必须重新安装更高版本的 SQL Server。
有没有更简单的方法可以将所有这些表连同键约束一起导入 SQL Server? 请帮忙。
提前致谢。
【问题讨论】:
你知道你可以使用openquery直接从访问表中选择吗? 【参考方案1】:您没有提及您拥有的 Access 版本。而且您也没有提及您拥有的 SQL Server 版本。对于任何最新的 SQL 服务器相关版本,您应该能够使用 + 运行 SSMA。它确实/让您可以选择要使用的 SQL Server 版本。在 Access 2010 之前(包括 Access 2010),有一个“内置”数据库导出可与 SQL Server 一起使用,但在 Access/office 2010 之后,您必须使用 SSMA,因为 access 中内置的 sql 迁移工具已被删除。
所以,您注意到由于某种原因您不能使用 SSMA,但没有提及您使用的是什么版本的 access/sql 服务器,那么我们的手(和建议)就被绑在这里了。
【讨论】:
您好,我有 MS Access 2010(64 位)、SQL Server Management Studio 2014(64 位)和用于 Access 2017 v8.8.0 的 SSMA。 如你所说,我尝试直接从 Access 导出数据库表。有效!!非常感谢!【参考方案2】:希望这会有所帮助,即使它是一个简单的模板。
我不得不将许多公司的访问数据库迁移到 sql server。我什至构建了工具来协助这个过程。这是一个巨大的颈部疼痛,但在实际工作方面并不十分困难。您可以编写 vba 代码来轻松获取表定义,然后构建此模板将是一项简单的任务。
IF OBJECT_ID('tempdb..#yourtableinAccess') IS NOT NULL
DROP TABLE #yourtableinAccess;
CREATE TABLE #yourtableinAccess
(
--Model After your local access table
);
CREATE TABLE yourtableinSQL
(
--Model After your local access table
);
INSERT INTO #yourtableinAccess
SELECT
-- build your select statement
-- be conscious of autoincrements and what not.
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'UNC PATH TO YOUR ACCESS FILE';'admin';'', YourAccessTableName)
MERGE yourtableinSQL AS TargetTable
USING #yourtableinAccess AS SourceTable
ON TargetTable.PRIMARYKEY = SourceTable.PRIMARYKEY
WHEN MATCHED
AND (
ISNULL(TargetTable.COLUMN, 0) <> ISNULL(SourceTable.COLUMN, 0)
OR ISNULL(TargetTable.COLUMN, 0) <> ISNULL(SourceTable.COLUMN, 0)
-- etc etc etc
-- note isnull might not be appropriate. Just review your data structure
)
THEN
UPDATE
SET
TargetTable.[COLUMN] = SourceTable.[COLUMN]
,TargetTable.[COLUMN] = SourceTable.[COLUMN]
-- etc etc etc
-- build your data structure here too
WHEN NOT MATCHED
THEN
INSERT
(
)
VALUES
(
);
注意 - 我使用了 merge 语句,因为我需要在每个表的迁移过程中获取数据的增量,因此简单的插入操作是不够的。
无论如何,编码愉快!
【讨论】:
以上是关于将 MS ACCESS 数据库表导入 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章
使用 c# 将 MS Access 表数据添加到 SQL Server 表中
在 MS Access 2007 中对 ODBC 表导入 sql 查询
MS Access:来自 SQL Server 的只读链接表?
如何通过编码将数据从 MS Access 导入 Sql Server [关闭]