繁体   English   中英

将MS ACCESS数据库表导入SQL服务器

[英]Import MS ACCESS database tables into SQL server

我正在尝试将 MS Access 表导入 SQL 服务器。

我尝试了两种方法:

1)当我按照 SQL 服务器中的步骤 => 右键单击数据库名称 => 任务 => 导入数据...我将能够成功导入表。

(这是我提到的网站: 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 服务器不匹配,我必须再次安装更高版本的 SQL 服务器。

有没有更简单的方法将所有这些表连同关键约束一起导入 SQL 服务器?
请帮忙。

提前致谢。

您没有提及您拥有的 Access 版本。 而且你也没有提到你有什么版本的 SQL 服务器。 对于 SQL 服务器的任何最新相关版本,您应该能够使用 + 运行 SSMA。 它确实有/让您选择使用哪个版本的 SQL 服务器。 在 Access 2010 之前并包括在内,有一个“内置”数据库导出可与 SQL 服务器一起使用,但在 Access/office 2010 之后,您必须使用 SSMA,因为访问内置的 sql 迁移工具已被删除。

所以,你注意到由于某种原因你不能使用 SSMA,但是没有提到你使用的是什么版本的 access/sql 服务器,那么我们的手(和建议)就被绑在这里了。

希望这会有所帮助,即使它是一个简单的模板。

我不得不将许多公司的访问数据库迁移到 sql 服务器。 我什至构建了工具来协助这个过程。 这是一个巨大的颈部疼痛,但在实际工作方面并不是非常困难。 您可以编写 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 
            (

            );

注意 - 我使用了合并语句,因为我需要在每个表的迁移过程中获取数据的增量,所以一个简单的插入到 wast 就足够了。

无论如何,快乐的编码!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM