Импорт таблиц базы данных MS ACCESS на сервер SQL - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь импортировать таблицы MS Access на SQL сервер.

Я пробовал 2 способа:

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 Сервер вместе с ключевыми ограничениями?
Пожалуйста, помогите.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Надеюсь, это поможет, хотя это простой шаблон.

Мне пришлось перенести множество баз данных компании на сервер 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 
            (

            );

Примечание. Я использовал оператор слияния, поскольку мне нужно было получать дельты данных во время процесса переноса каждой таблицы, поэтому простой вставки в нее было недостаточно.

В любом случае, счастливого кодирования!

0 голосов
/ 09 апреля 2020

Вы не упоминаете, какая у вас версия Access. И вы также не упоминаете, какая у вас версия сервера SQL. С любой последней относительной версией SQL сервера вы должны иметь возможность использовать + запуск SSMA. Он имеет / дает вам выбор, какую версию сервера SQL использовать. Вплоть до Access 2010 включался «встроенный» экспорт базы данных, который работает с сервером SQL, но после Access / office 2010 вам придется использовать SSMA, так как встроенные в доступ инструменты миграции sql были удалены.

Итак, вы хорошо заметили, что по какой-то причине вы не можете использовать SSMA, но без упоминания того, какие версии сервера доступа / sql вы используете, наши руки (и предложения) связаны здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...