2012-06-16 1 views
1

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

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

Спасибо Steave

+1

Вы хотите различать схемы, количество строк, значения строк? Какой уровень детализации вам нужен? – Ilion

+1

Мне это звучит так: «Я хочу построить космический корабль, не могли бы вы научить меня науке о ракетах?» Другими словами: вы планируете писать инструмент и не имеете понятия о функциональности ядра? –

+0

LLion Ive обновил мой вопрос приятель; Хорошая цитата UWE, но я верю в ее довольно очевидный вопрос, я задаю самый быстрый способ сделать это, я знаю, как это сделать, но я хочу, чтобы эксперты комментировали самый быстрый способ с точки зрения производительности и скорости. –

ответ

1

Если все, что вам нужно проверить, это имена и типы полей, ADO может подходить: http://www.w3schools.com/ado/met_conn_openschema.asp. Вы не получите точного соответствия между типами полей доступа и типами полей SQL Server.

+0

. Меня больше интересует разница в кортежах, а затем схема разности схем будет одинаковой как в dbases –

2

К сожалению, это звучит так, как будто вы хотите очень тонкое зерно, отличающееся между двумя разрозненными системами, что не позволяет обеспечить большую эффективность.

Если таблицы не слишком велики, лучше всего экспортировать их в CSV (обязательно закажите результаты!) И запустите с ними команду diff.

+0

hi llion, я также пришел к такому же подходу и передал данные в csv, а затем сравнил файл csv с diff, даже если большие файлы там будут работать. –

+1

О да, это сработает с большими файлами/таблицами. Вы могли бы просто решить проблемы с сетевым переносом и, если они стали слишком большими. – Ilion

1

Создание связанного сервера с базой данных доступа мс и использовать запросы для дифф таблиц:

EXEC sp_addlinkedserver @server = 'DBName' 
         , @provider = 'Microsoft.Jet.OLEDB.4.0' 
         , @srvproduct = 'OLE DB Provider for Jet' 
         , @datasrc = 'C:\myaccessdb.mdb' 

сравнения 2 таблицы проще всего с помощью запроса, как этот

SELECT MIN(table_name), column1, column2, ... 
FROM (
    SELECT 'sql server table' , column1, column2, ... 
    FROM A 
    UNION ALL 
    SELECT 'msaccess table' , column1, column2, ... 
    FROM B) tmp 
GROUP BY column1, column2, ... 
HAVING COUNT(*) = 1 

Другой вариант заключается в использовании на утилите tablediff.exe, которая поставляется с Sql Server. См. more info on msdn

Смежные вопросы