Объединение баз данных - удаление столбца идентификации - PullRequest
0 голосов
/ 27 апреля 2011

Мне нужно создать инструмент, способный объединять производственные базы данных клиентов.Обычно эти базы данных будут иметь одну и ту же схему (позже я сделаю некоторые проверки, но сейчас мы предположим, что это так).Фильтрация дублирующихся данных тоже кое-что на будущее.Это должно быть сделано автоматически (поэтому генерация скриптов через SSMS и т. Д. Не требуется).Мне уже приходилось начинать все сначала, потому что каждый раз, когда я сталкивался с проблемами из-за вещей, о которых я не думал, на этот раз я хотел попросить вас, ребята, о совете, прежде чем начать все сначала.

Мой текущий план действий:

  • Скопировать схему из базы данных 1 (позже я добавлю некоторые проверки здесь, когда схема отличается
  • Зацикливание по всем таблицами установите все обновления внешнего ключа в каскад, и установите порядок, в котором необходимо вставить данные таблицы (таким образом, таблицы, содержащие сначала PK, а затем таблицы, содержащие FK)
  • Зацикливать каждую таблицу вправильный порядок

    • Проверьте в таблице базы данных 2 столбец идентификаторов, если это так, извлеките текущее начальное значение из соответствующей таблицы в базе данных 1, удалите свойство идентификатора в таблице базы данных 2 и обновите каждый идентификатор до newID= currentID + seed (чтобы избежать дублирования первичных ключей позже)
    • Создать сценарий вставки (SMO's Table.EnumScript) для базы данных 1 таблица
    • Создание сценария вставки (SMO's Table.EnumScript) для таблицы базы данных 2
    • Выполнение каждой строки в базе данных 1 сценарий вставки в новой базе данных
    • Выполнение каждой строки в базе данных 2 сценарий вставки (которыйтеперь есть данные первичных ключей / полей идентификаторов, которые будут следовать за данными в базе данных 1) в новой базе данных
  • Перейти к следующей таблице

При тестировании все работало (отключение свойства identity в SSMS, создание сценария T-SQL для обновления каждой строки с заданным начальным числом, ..) Но теперь проблема заключается в том, чтобы автоматизировать это в C #, более конкретно - отключить идентификациюимущество.Кажется, не существует чистого решения для этого.Создание новой таблицы и перестроение каждого ограничения и т. Д. Кажется неправильным путем, потому что единственная причина, по которой мне это нужно, - это каскадирование каждого FK, чтобы все по-прежнему указывало на правильное место.

Другой способ - отложитьобновление data-column-data и изменение его после генерации скрипта и перед вставкой в ​​новую базу данных.Но тогда мне нужно знать, какие данные указывают на какие другие данные, в то время как все еще находится в строках (inserttscript)?

Есть предложения, мысли или методы, как с этим справиться?

Я знаю о сравнении SQL в Red Gate, и это действительно удивительно, но мне нужно программировать его самостоятельно.

Использование: SMO, SQL Server 2005 - 2008R2 (без разработчиков или корпоративного выпуска на клиентских серверах), ADO.NET, C #, .NET Framework 2.0, Visual Studio 2008

1 Ответ

1 голос
/ 25 июня 2011

Я не уверен, что именно вы пытаетесь выполнить с помощью этого процесса, но управление версиями базы данных меня очень интересует.
Посмотрите на DBSourceTools (http://dbsourcetools.codeplex.com).
Это утилита для записи всей базы данных на диск, включая все ограничения внешнего ключа и данные.
Используя цели развертывания, вы сможете заново создать эти базы данных на другом сервере баз данных (обычно на локальном компьютере).
Инструмент будет обрабатывать зависимости и большие таблицы базы данных, используя Sql Bulk insert - попытка сгенерировать скрипт с 50 000 операторов вставки будет кошмаром.
Веселитесь.

Отказ от ответственности: Я участвую в проекте http://dbsourcetools.codeplex.com.

...