Синхронизация хранимых процедур между двумя базами данных? - PullRequest
1 голос
/ 03 июня 2009

Для приложения, которое разрабатывает моя команда, я создал копию базы данных для самостоятельной работы над некоторыми возможными функциями системы. При этом я изменил некоторые хранимые процедуры. Тем временем другие члены команды продолжают работать с другой базой данных и изменять некоторые из этих хранимых процедур.

Код по-прежнему вызывает те же имена SP, поэтому мне нужно знать, какие хранимые процедуры были изменены, чтобы сделать правильные исправления. Есть ли способ взять все хранимые процедуры из одной базы данных и сопоставить их с SP с таким же именем в другой базе данных, чтобы увидеть, какие они отличаются (кроме разницы USES [DB1] и USES [DB2]).

Спасибо

Ответы [ 5 ]

5 голосов
/ 03 июня 2009

Я бы порекомендовал приобрести (или просто оценить) специальный инструмент для достижения этой цели. На рынке представлен ряд продуктов, в том числе: Apex SQL Diff и Redgate SQL Сравнение

Я использовал Apex SQL Diff в течение ряда лет и искренне рекомендую его.

1 голос
/ 03 июня 2009

Одна из функций, доступных в Visual Studio, называется Schema Compare, которая будет сравнивать все объекты базы данных, такие как таблицы, представления, sprocs и т. Д. Не уверены, доступен ли вам этот инструмент или нет.

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

1 голос
/ 03 июня 2009

Ой, это то, что вы должны были рассмотреть ранее. Один из подходов: извлечь код SP в файлы и использовать такой инструмент, как Windiff.

Или, если вам нужно сделать это в базе данных, проверьте эти инструменты .

В будущем поместите ваши сценарии SP в систему контроля версий. Вы могли бы разветвить и объединить изменения.

0 голосов
/ 03 июня 2009

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

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

Код для получения списка всех имен моих SP и даты изменения выглядит следующим образом.

select ROUTINE_NAME, LAST_ALTERED
from information_schema.routines
WHERE
Routine_Type='procedure'
AND specific_Catalog='DATABASE_NAME' ORDER BY LAST_ALTERED
0 голосов
/ 03 июня 2009

чтобы узнать, когда что-то изменилось, используйте это:

SELECT
    CONVERT(varchar(23),modify_date,121) AS modify_date
        ,type_desc
        ,name
    FROM sys.objects
    WHERE is_ms_shipped=0
    ORDER BY 1 DESC

в нем будут перечислены следующие типы предметов:

CHECK_CONSTRAINT
DEFAULT_CONSTRAINT
FOREIGN_KEY_CONSTRAINT
PRIMARY_KEY_CONSTRAINT
SQL_SCALAR_FUNCTION
SQL_STORED_PROCEDURE
SQL_TABLE_VALUED_FUNCTION
SQL_TRIGGER
UNIQUE_CONSTRAINT
USER_TABLE
VIEW

Кроме того, вы можете захотеть взглянуть на что-то вроде CVS или sourcesafe, так что вы можете проверить / в коде и иметь возможности слияния / ветвления.

Сценарий всего для отдельных файлов и использование инструмента, такого как Beyond Compare (имеет бесплатную пробную версию) http://www.scootersoftware.com/moreinfo.php Он может сравнивать каталоги и также позволяет просматривать различия по файлам, с возможностью слияния и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...