Как я могу быстро идентифицировать самые последние измененные хранимые процедуры в SQL Server

StackOverflow https://stackoverflow.com/questions/85036

Вопрос

Мне нужно вручную перенести измененные хранимые процедуры из экземпляра базы данных 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%

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top