Надеюсь, это поможет, хотя это простой шаблон.
Мне пришлось перенести множество баз данных компании на сервер 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
(
);
Примечание. Я использовал оператор слияния, поскольку мне нужно было получать дельты данных во время процесса переноса каждой таблицы, поэтому простой вставки в нее было недостаточно.
В любом случае, счастливого кодирования!