Как я могу быстро идентифицировать самые последние измененные хранимые процедуры в SQL Server
-
01-07-2019 - |
Вопрос
Мне нужно вручную перенести измененные хранимые процедуры из экземпляра базы данных DEV SQL Server 2005 в ТЕСТОВЫЙ экземпляр.За исключением изменений, которые я переношу, базы данных имеют те же схемы.Как я могу быстро определить, какие хранимые процедуры были изменены в базе данных разработчиков для переноса в ТЕСТОВЫЙ экземпляр?
Я предполагаю, что могу написать запрос к некоторым системным таблицам для просмотра объектов базы данных типа хранимая процедура с сортировкой по каким-то последним измененным или скомпилированным данным, но я не уверен.Может быть, есть какая-нибудь бесплатная утилита, на которую кто-нибудь может мне указать.
Заранее благодарю,
Боб
Решение
вместо использования sysobjects, которое больше не рекомендуется, используйте sys.procedures
select name,create_date,modify_date
from sys.procedures
order by modify_date desc
вы можете сделать предложение where самостоятельно, но здесь оно будет перечислено в порядке убывания даты изменения
Другие советы
Боб Омалли, вероятно, решил свою проблему давным-давно, но, надеюсь, новые читатели найдут это полезным.
Есть несколько особых случаев, когда скрипты могут не давать оптимальных результатов.
Одним из них является удаление хранимых процедур или других объектов в среде разработки – вы не поймаете это, используя системные представления, потому что объект там больше не будет существовать.
Кроме того, я не совсем уверен, что этот подход может работать с такими изменениями, как разрешения и тому подобное.
В таких случаях лучше всего использовать какой-нибудь сторонний инструмент, просто чтобы еще раз проверить, ничего ли не пропущено.
Я успешно использовал Разница в ApexSQL в прошлом для подобных задач это действительно хорошо работало на больших базах данных с более чем 1000 объектами, но вы не ошибетесь с SQL Compare, который уже упоминался здесь, или, в принципе, с любым другим инструментом, существующим на рынке.
Отказ от ответственности:Я не связан ни с одним из поставщиков, которых я упоминаю здесь, но я использую оба набора инструментов (Apex и RG) в компании, в которой я работаю.
Вы можете выполнить этот запрос, чтобы найти все хранимые процедуры, измененные за последние x дней:
SELECT name
FROM sys.objects
WHERE type = 'P'
AND DATEDIFF(D,modify_date, GETDATE()) < X
Хотя это и не бесплатно, у меня был хороший опыт использования Red-Gates Инструмент сравнения SQL.В прошлом у меня это срабатывало.У них есть бесплатная пробная версия, которая может оказаться достаточной для решения вашей текущей проблемы.
вы также можете использовать следующий код snipet
USE AdventureWorks2008;
GO
SELECT SprocName=name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'
AND name = 'uspUpdateEmployeeHireInfo'
GO
Вы можете использовать следующий тип запроса для поиска измененных хранимых процедур, вы можете использовать любое число, затем 7, в соответствии с вашими потребностями
ВЫБЕРИТЕ имя Из sys.objects ГДЕ type = 'P' И DATEDIFF(D,modify_date, GETDATE()) < 7
Существует несколько инструментов сравнения баз данных.Тот, который мне всегда нравился, - это SQLCompare by Красные Ворота.
Вы также можете попробовать использовать:
SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate
В SQL 2000 это не всегда работало бы, потому что использование ALTER неправильно обновляло дату, но в 2005 году я считаю, что проблема устранена.
Однако я сам использую инструмент сравнения SQL, поэтому не могу ручаться за этот метод на 100%