Как быстро определить наиболее недавно измененные хранимые процедуры в SQL Server
Мне нужно вручную перенести измененные хранимые процедуры из экземпляра базы данных DEV SQL Server 2005 в экземпляр TEST. За исключением изменений, которые я переношу, базы данных имеют одинаковые схемы. Как я могу быстро определить, какие хранимые процедуры были изменены в базе данных DEV для миграции на экземпляр TEST?
Я предполагаю, что могу написать запрос к некоторым системным таблицам для просмотра объектов базы данных хранимой процедуры типа, сортировки по каким-то последним измененным или скомпилированным данным, но я не уверен. Может быть, есть какая-то бесплатная полезность, на которую кто-то может указать мне.
Спасибо заранее,
Боб
Ответы
Ответ 1
вместо использования sysobjects, который больше не рекомендуется использовать sys.procedures
select name,create_date,modify_date
from sys.procedures
order by modify_date desc
вы можете сделать предложение where самостоятельно, но это отобразит его в порядке уменьшения даты по убыванию
Ответ 2
Боб Омалей, вероятно, давно решил свою проблему, но, надеюсь, новые читатели найдут это полезным.
Существуют некоторые особые случаи, когда сценарии могут не давать оптимальных результатов.
Один из них - удаление хранимых процедур или других объектов в среде dev - вы не поймете это с помощью системных представлений, потому что объект больше не существует.
Кроме того, Im действительно не уверен, что этот подход может работать с такими изменениями, как разрешения и т.д.
В таких случаях лучше всего использовать какой-либо сторонний инструмент, чтобы просто дважды проверить, что ничего не пропустили.
Ive успешно использовал ApexSQL Diff в прошлом для подобных задач, и он отлично работал на больших базах данных с 1000 + объектами, но вы не можете ошибаться с SQL Compare, которые уже упоминались здесь, или в основном любой другой инструмент, который существует на рынке.
Отказ от ответственности: я не связан ни с одним из поставщиков. Я упоминаю здесь, но я использую оба набора инструментов (Apex и RG) в компании, в которой я работаю.
Ответ 3
Вы можете выполнить этот запрос, чтобы найти все хранимые процедуры, измененные за последние x дней:
SELECT name
FROM sys.objects
WHERE type = 'P'
AND DATEDIFF(D,modify_date, GETDATE()) < X
Ответ 4
Хотя я не свободен, у меня был хороший опыт использования Red-Gates SQL Compare tool. Это работало для меня в прошлом. У них есть бесплатная пробная версия, которая может быть достаточно хорошей, чтобы решить вашу текущую проблему.
Ответ 5
вы также можете использовать следующий код snipet
USE AdventureWorks2008;
GO
SELECT SprocName=name, create_date, modify_date
FROM sys.objects
WHERE type = 'P'
AND name = 'uspUpdateEmployeeHireInfo'
GO
Ответ 6
Вы можете использовать следующий тип запроса, чтобы найти измененные хранимые процедуры, вы можете использовать любое число, а затем 7 в соответствии с вашими потребностями
SELECT name
FROM sys.objects
WHERE type = 'P'
AND DATEDIFF(D,modify_date, GETDATE()) < 7
Ответ 7
Есть несколько инструментов сравнения баз данных. Мне всегда нравится SQLCompare от Red Gate.
Вы также можете попробовать:
SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate
В SQL 2000, который не всегда работал, потому что использование ALTER не обновляло дату правильно, но в 2005 году я считаю, что проблема исправлена.
Я использую инструмент сравнения SQL самостоятельно, поэтому я не могу ручаться за этот метод 100%