#sql #sql-server #sql-server-2012 #compare
#sql #sql-сервер #sql-server-2012 #Сравнить
Вопрос:
У нас есть экземпляр Sql Server 2012, в котором у нас есть 2 базы данных, называемые A и B (предположим, что A — производственная база данных, а B — база данных разработки, а B — точная копия базы данных A)
предположим, что для целей разработки определение некоторой процедуры (уже существующей, а не вновь созданной) было изменено в базе данных B, но не в A (рабочей базе данных).
Чтобы найти процедуры, которые отличаются по определению, я придумал следующий сценарий, но проблема в том, что я не уверен на 100%, что этот сценарий работает каждый раз. Поэтому, пожалуйста, предложите свои идеи по этому поводу.
Сценарий
Временная таблица 1 ( A_PROCEDURE) — для хранения всех имен и определений процедур, существующих в базе данных A (выполняется из базы данных A)
select * into A_PROCEDURE FROM (
Select routine_name,routine_definition from INFORMATION_SCHEMA.ROUTINES ) DTL;
Теперь из базы данных B я выполнил следующий запрос, чтобы найти все процедуры, которые не совпадают по определению процедуры
SELECT T.ROUTINE_NAME B_PROC,
L.ROUTINE_NAME A_PROC,T.ROUTINE_DEFINITION B_PROC_DEF,L.ROUTINE_DEFINITION A_PROC_DEF
FROM INFORMATION_SCHEMA.ROUTINES T JOIN A.DBO.A_PROCEDURE L ON T.ROUTINE_NAME = L.ROUTINE_NAME
AND T.ROUTINE_DEFINITION <> L.ROUTINE_DEFINITION;
Из приведенного выше запроса я нашел процедуры, которые совпадают по имени, но не совпадают по определению (которые являются правильными — проверяются вручную построчно).
Так это правильный способ? Следует рассмотреть что-нибудь еще? Пожалуйста, поделитесь своими идеями по этому поводу
Спасибо и с наилучшими пожеланиями, Вишнудас
Ответ №1:
Привет, Вишнудас: вам нужна sp_HelpText
системная хранимая процедура. Эта утилита сохраняет определение каждой хранимой процедуры в ядре базы данных SQL Server.
Каждому администратору базы данных или разработчику стоит использовать инструмент сравнения. В то же время, вы можете проверить этот блог, где вы могли бы написать скрипт без статистики о встроенном сравнении двух хранимых процедур. Там вы получите объяснение об использовании sp_HelpText
.
Тем не менее, я предлагаю использовать инструмент сравнения, такой как SQL Compare tool, используемый производственными командами в некоторых средних и крупных компаниях. Рекомендуется использовать полезный верхний список, и он был просмотрен другими коллегами.
Комментарии:
1. @leshua: Спасибо за ваше ценное предложение. Попробует все предложения, которые вы рекомендовали,