У меня есть «эталонная» база данных SQL Server 2005, которая используется в качестве нашего глобального стандарта. Мы все настроены на правильную синхронизацию общей схемы таблицы и данных, но еще не имеем хорошего решения для других объектов, таких как представления, хранимые процедуры и определяемые пользователем функции.
Мне известны такие продукты, как Сравнение SQL Redgate, но мы не хотим полагаться на (или более) сторонние инструменты прямо сейчас.
Есть ли способ гарантировать, что данная хранимая процедура или представление в эталонной базе данных, например, обновлено в целевых базах данных? Можно ли это написать по сценарию?
Отредактируйте для пояснения: когда я говорю «сценарий», я имею в виду запуск сценария, который выталкивает любые изменения на целевые серверы. Не запускать один и тот же сценарий CREATE / ALTER несколько раз на нескольких серверах.
Мы будем очень благодарны за любые советы / опыт о том, как подойти к этому.


1) Храните все свои представления, триггеры, функции, хранимые процедуры, схемы таблиц и т. д. В системе управления версиями и используйте их в качестве основного.
2) В противном случае используйте свою эталонную базу данных в качестве основных и сценариев для представлений, хранимых процедур и т. д. Щелкните правой кнопкой мыши DB, Tasks-> Generate Scripts и выберите свои объекты.
3) Вы даже можете использовать репликацию транзакций между эталонной и целевой базами данных.
Я твердо верю, что лучший способ - создать сценарий все и поместить его в систему управления версиями.
У нас уже есть SP и т. д. В системе управления версиями. Я надеюсь на что-то вроде репликации напрямую из одной БД в другую. Не могли бы вы подробнее рассказать о репликации транзакций?
Это означает, что вы реплицируете хранимые процедуры как «только схему процедуры» (см. Sp_addarticle или msdn.microsoft.com/en-us/library/ms147873.aspx).
Я использую (и люблю) инструменты RedGate, но когда Microsoft анонсировала Visual Studio 2010, они решили разрешить подписчикам MSDN, которые получают Visual Studio 2008 Team System, также получить Visual Studio 2008 Database Edition (в которой есть инструмент сравнения схем).
Поэтому, если у вас или вашей организации есть подписка MSDN, вы можете подумать о загрузке и установке Database Edition поверх вашей командной системы, чтобы получить все функции прямо сейчас.
Подробнее на http://msdn.microsoft.com/en-us/vsts2008/products/cc990295.aspx
Для этого вы можете использовать системные таблицы.
Например,
select * from sys.syscomments
Столбец «текст» предоставит вам весь код для процедур хранилища (плюс другие данные).
Стоит посмотреть все системные таблицы и процедуры. На самом деле, я подозреваю, что это то, что скрывается под капотом программного обеспечения RedGate и других инструментов.
Я только начал экспериментировать с этим, поэтому я не могу точно сказать обо всех подводных камнях и о том, какие другие системные таблицы вам нужно запросить, но это должно помочь вам начать.
Также см:
Запрос для перечисления хранимых процедур SQL Server вместе со строками кода для каждой процедуры
Это немного другой вопрос, чем ваш, но связанный.
Это не дает прямого ответа на вопрос, но указывает на то, что я могу получить нужную информацию. Спасибо! :)
Взгляните на ScriptDB на Codeplex (http://www.codeplex.com/ScriptDB)
Это консольное приложение C#, которое создает сценарии объектов базы данных SQL с помощью SMO. Вы можете использовать это для сравнения скриптов, созданных на двух серверах. Поскольку у него открытый исходный код, отрегулируйте его, если вам это нужно.
Тимур
Если вы используете «сортировку скриптов» при создании скриптов, они будут отсортированы в алфавитном порядке, чтобы упростить сравнение.