web-dev-qa-db-fra.com

Comment puis-je identifier rapidement les procédures stockées les plus récemment modifiées dans SQL Server

J'ai besoin de migrer manuellement les procédures stockées modifiées d'une instance de base de données DEV SQL Server 2005 vers une instance TEST. À l'exception des modifications que je migre, les bases de données ont les mêmes schémas. Comment puis-je identifier rapidement les procédures stockées qui ont été modifiées dans la base de données DEV pour la migration vers l'instance TEST?

Je suppose que je peux écrire une requête sur certaines des tables système pour afficher les objets de base de données de type procédure stockée, en les triant en fonction des dernières données modifiées ou compilées, mais je ne suis pas sûr. Il y a peut-être une sorte d'utilitaire gratuit que quelqu'un peut me désigner.

Merci d'avance,

Bob

22
Bob OMalley

au lieu d'utiliser sysobjects qui n'est plus recommandé, utilisez sys.procedures

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

vous pouvez faire la clause where vous-même, mais cela l'énumérera par ordre de date de modification décroissante

59
SQLMenace

Bob OMalley a probablement résolu son problème il y a longtemps, mais j'espère que les nouveaux lecteurs trouveront cela utile.

Il existe des cas particuliers où les scripts peuvent ne pas donner des résultats optimaux.

La première consiste à supprimer des procédures stockées ou d'autres objets dans un environnement de développement - vous n'attraperez pas cela à l'aide des vues système car l'objet n'existera plus.

En outre, je ne suis pas vraiment sûr que cette approche puisse fonctionner sur des modifications telles que les autorisations et similaires.

Dans de tels cas, il est préférable d'utiliser un outil tiers juste pour vérifier que rien ne manque.

J'ai utilisé avec succès ApexSQL Diff dans le passé pour des tâches similaires et cela a très bien fonctionné sur de grandes bases de données avec plus de 1000 objets, mais vous ne pouvez pas vous tromper avec SQL Compare qui est déjà mentionné ici ou pratiquement tout autre outil qui existe sur le marché.

Avertissement: je ne suis affilié à aucun des fournisseurs que je mentionne ici, mais j'utilise les deux ensembles d'outils (Apex et RG) dans l'entreprise pour laquelle je travaille.

11
Ron Biggs

Vous pouvez exécuter cette requête pour rechercher toutes les procédures stockées modifiées au cours des x derniers jours:

DECLARE @X INT = 30
SELECT name
FROM sys.objects
WHERE type = 'P'
    AND DATEDIFF(D,modify_date, GETDATE()) < @X
10
Jason Stevenson

Bien que non gratuit, j'ai eu une bonne expérience de l'utilisation de Red-Gates outil de comparaison SQL . Cela a fonctionné pour moi dans le passé. Ils ont un essai gratuit disponible qui peut être assez bon pour résoudre votre problème actuel.

2
Craig

vous pouvez également utiliser l'extrait de code suivant

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO
1
RBS

Vous pouvez utiliser le type de requête suivant pour trouver des procédures stockées modifiées, vous pouvez utiliser n'importe quel nombre puis 7 selon vos besoins

SELECT name
    FROM sys.objects
    WHERE type = 'P'
        AND DATEDIFF(D,modify_date, GETDATE()) < 7
0
RBS

Il existe plusieurs outils de comparaison de bases de données. Un que j'ai toujours aimé est SQLCompare par Red Gate .

Vous pouvez également essayer d'utiliser:

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

Dans SQL 2000, cela n'aurait pas toujours fonctionné, car l'utilisation d'ALTER n'a pas correctement mis à jour la date, mais en 2005, je pense que ce problème est résolu.

J'utilise moi-même un outil de comparaison SQL, donc je ne peux pas garantir cette méthode à 100%

0
Tom H