Как быстро определить самые последние измененные хранимые процедуры в SQL Server - PullRequest
22 голосов
/ 17 сентября 2008

Мне нужно вручную перенести измененные хранимые процедуры из экземпляра базы данных DEV SQL Server 2005 в экземпляр TEST. За исключением изменений, которые я переношу, базы данных имеют одинаковые схемы. Как я могу быстро определить, какие хранимые процедуры были изменены в базе данных DEV для миграции на экземпляр TEST?

Я предполагаю, что могу написать запрос к некоторым системным таблицам, чтобы просмотреть объекты базы данных типа хранимой процедуры, отсортировав их по какому-либо последнему измененному или скомпилированному данным, но я не уверен. Может быть, есть какая-то бесплатная утилита, на которую кто-то может указать мне.

Заранее спасибо,

Bob

Ответы [ 7 ]

55 голосов
/ 17 сентября 2008

вместо использования sysobjects, что больше не рекомендуется, используйте sys.procedures

select name,create_date,modify_date
from sys.procedures
order by modify_date desc

вы можете самостоятельно выполнить предложение where, но оно будет перечислено в порядке убывания даты изменения

11 голосов
/ 04 сентября 2013

Боб OMalley, вероятно, решил свою проблему давным-давно, но, надеюсь, новые читатели найдут это полезным.

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

Одним из них является удаление хранимых процедур или других объектов в среде разработчика - вы не поймете это при использовании системных представлений, потому что объект там больше не будет существовать.

Кроме того, я не совсем уверен, что этот подход может работать с изменениями, такими как разрешения и тому подобное.

В таких случаях лучше всего использовать какой-либо сторонний инструмент, просто чтобы дважды проверить, что ничего не пропущено.

Я успешно использовал ApexSQL Diff в прошлом для аналогичных задач, и он действительно хорошо работал на больших базах данных с 1000+ объектами, но вы не ошибетесь с SQL Compare, который уже упоминался здесь или в принципе любой другой инструмент, который существует на рынке.

Отказ от ответственности: я не связан ни с одним из поставщиков, о котором я упоминаю здесь, но я использую оба набора инструментов (Apex и RG) в компании, в которой я работаю.

9 голосов
/ 17 сентября 2008

Вы можете выполнить этот запрос, чтобы найти все хранимые процедуры, измененные за последние x дней:

SELECT name
FROM sys.objects
WHERE type = 'P'
    AND DATEDIFF(D,modify_date, GETDATE()) < X
2 голосов
/ 17 сентября 2008

Хотя и не бесплатно, у меня был хороший опыт использования Red-Gates SQL Compare tool . Это работало для меня в прошлом. У них есть бесплатная пробная версия, которая может быть достаточно хороша для решения вашей текущей проблемы.

1 голос
/ 17 сентября 2008

Вы также можете использовать следующий фрагмент кода

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO
0 голосов
/ 17 сентября 2008

Существует несколько инструментов сравнения баз данных. Мне всегда нравился SQLCompare от Red Gate .

Вы также можете попробовать использовать:

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

В SQL 2000 это не всегда работало, потому что использование ALTER не обновляло дату правильно, но в 2005 году я считаю, что проблема исправлена.

Я сам использую инструмент сравнения SQL, поэтому я не могу поручиться за этот метод 100%

0 голосов
/ 17 сентября 2008

Вы можете использовать следующий тип запроса, чтобы найти измененные хранимые процедуры, вы можете использовать любое число затем 7 в соответствии с вашими потребностями

ВЫБРАТЬ имя ОТ sys.objects ГДЕ тип = 'П' AND DATEDIFF (D, modify_date, GETDATE ()) <7 </p>

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