2013-05-14 2 views
1

У меня есть продукт, который я в настоящее время создаю, полагаясь на сервер SQL для бэкэнд. Одна из проблем, которую я пытаюсь решить, заключается в улучшении истории обновления. Таким образом, v1 будет иметь определенную схему, а v2 может включать некоторые улучшения этой схемы (новые таблицы и новые столбцы).Программно найти и применить различия схем на SQL Server

Я знаю SDK от RedGate и ApexSQL, но хотелось бы избежать.

Я прочитал документы SMO, но я новичок в этом и изо всех сил пытаюсь понять, можно ли это применить в этом situtaiton. В идеале, мне хотелось бы, чтобы это было сделано с программой (SMO или другое) - базовые случаи кажутся достаточно прямыми, но я действительно не хочу заново изобретать колесо, если могу помочь. Кто-нибудь имеет опыт аналогичных требований или идей о том, как я мог бы подойти?

ответ

1

Может быть не совсем то, что вы как раз ищет (так как это не SMO), но, взглянув на Entity Framework Code First Миграции может помочь вам:

http://msdn.microsoft.com/en-us/data/jj591621

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

+0

Я использую EF Code First - так что проверьте CF Migrations - спасибо за ссылку. –

2

Вы не говорите, какую версию SQL Server вы используете, но, как мне кажется, в 2005 году и за ее пределами, существует концепция триггеров базы данных. Они работают как их кузены на уровне таблицы, но могут использоваться для отслеживания любых изменений DDL, которые происходят в базе данных. Мы не использовали его для создания DDL - больше для отслеживания изменений формата таблицы. Хотя то, что вам нужно, должно быть возможно, я бы подумал.

Триггеры - одна из тех вещей, которые делят разработчиков. Некоторые люди думают, что они лучше всего, так как нарезанный хлеб, в то время как другие ненавидят их со страстью. Возможно, потому, что когда данные меняются, это последнее, о чем вы думаете.

+1

Интересный подход, который вы описываете, у меня был опыт работы с триггерами в прошлом, и я в порядке с ними. Я понимаю, что не указал, что использовал EF, поэтому я не уверен, что он будет работать в моем случай - если не полезен, по крайней мере, для подобных случаев. –

+0

Это интересно. Если мне угрожать догадки, я подозреваю, что EF будет генерировать DDL аналогичным образом, когда вы вносите изменения в GUI SSMS. Я бы не поспорил на мой дом, хотя ... :) –

1

I мы Проекты базы данных в Visual Studio для управления версиями схем. После того, как вы создадите базовую линию в проекте базы данных, вы можете внести свои изменения в проект, а затем использовать Schema Compare для создания сценариев SQL для применения изменений в разных средах.

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

Этот блог идет над тем, как создать в Visual Studio 2012: http://candordeveloper.com/2013/01/08/creating-a-sql-server-database-project-in-visual-studio-2012/

Red Gate есть схема сравнения продукта, но я действительно не использовал его.

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