Come posso identificare rapidamente le procedure memorizzate modificate più di recente in SQL Server

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

Domanda

Devo migrare manualmente le procedure memorizzate modificate da un'istanza del database DEV SQL Server 2005 a un'istanza TEST.Fatta eccezione per le modifiche che sto migrando, i database hanno gli stessi schemi.Come posso identificare rapidamente quali procedure memorizzate sono state modificate nel database DEV per la migrazione all'istanza TEST?

Presumo di poter scrivere una query su alcune tabelle di sistema per visualizzare oggetti di database di tipo procedura memorizzata, ordinandoli in base a una sorta di ultimi dati modificati o compilati, ma non ne sono sicuro.Forse c'è una sorta di utilità gratuita che qualcuno può indicarmi.

Grazie in anticipo,

Bob

È stato utile?

Soluzione

invece di usare sysobjects che non è più consigliato usa sys.procedures

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

puoi creare tu stesso la clausola where, ma questa la elencherà in ordine di data di modifica decrescente

Altri suggerimenti

Bob O'Malley probabilmente ha risolto il suo problema molto tempo fa, ma spero che i nuovi lettori lo trovino utile.

Esistono alcuni casi speciali in cui gli script potrebbero non fornire risultati ottimali.

Uno sta eliminando le procedure memorizzate o altri oggetti nell'ambiente di sviluppo: non lo noterai utilizzando le visualizzazioni di sistema perché l'oggetto non esisterà più lì.

Inoltre, non sono sicuro che questo approccio possa funzionare su modifiche come autorizzazioni e simili.

In questi casi è meglio utilizzare uno strumento di terze parti solo per ricontrollare che non manchi nulla.

Ho utilizzato con successo Diff. ApexSQL in passato per attività simili e ha funzionato davvero bene su database di grandi dimensioni con oltre 1000 oggetti, ma non puoi sbagliare con SQL Compare che è già menzionato qui o praticamente con qualsiasi altro strumento esistente sul mercato.

Disclaimer:Non sono affiliato con nessuno dei fornitori che menziono qui, ma utilizzo entrambi i set di strumenti (Apex e RG) nell'azienda per cui lavoro.

Puoi eseguire questa query per trovare tutte le procedure memorizzate modificate negli ultimi x giorni:

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

Sebbene non sia gratuito, ho avuto una buona esperienza con Red-Gates Strumento di confronto SQL.Ha funzionato per me in passato.Hanno una prova gratuita disponibile che potrebbe essere sufficiente per risolvere il tuo problema attuale.

puoi anche utilizzare il seguente frammento di codice

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO

È possibile utilizzare il seguente tipo di query per trovare procedure memorizzate modificate, è possibile utilizzare qualsiasi numero oltre a 7 in base alle proprie esigenze

Seleziona nome da sys.objects dove type = 'p' e datediff (d, modify_date, getdate ()) <7

Esistono diversi strumenti di confronto dei database.Uno che mi è sempre piaciuto è SQLCompare di Porta Rossa.

Puoi anche provare a utilizzare:

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

In SQL 2000 ciò non avrebbe sempre funzionato, perché l'utilizzo di ALTER non aggiornava correttamente la data, ma nel 2005 credo che il problema sia stato risolto.

Io stesso utilizzo uno strumento di confronto SQL, quindi non posso garantire quel metodo al 100%

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top