2010-09-18 12 views
6

Qualcuno è a conoscenza di un modo per verificare la correttezza delle query in tutte le stored procedure in un database? Sto pensando allo scenario in cui se modifichi qualcosa in un file di codice, semplicemente facendo una ricostruzione ti mostrerebbero errori di compilazione che ti indirizzano a luoghi in cui è necessario correggere le cose. In uno scenario di database, diciamo che se si modifica una tabella e si rimuove una colonna utilizzata in una stored procedure, non si saprà nulla su questo problema fino alla prima esecuzione della procedura.Analizza tutte le stored procedure in un database

+0

possibile duplicato (http [Come posso controllare a livello di codice (parse) la validità della dichiarazione TSQL?]: // StackOverflow. it/questions/3084387/how-can-i-programmatic-check-parse-the-validity-of-a-tsql-statement) @CyberDude - Puoi usare 'SET NOEXEC ON 'ma penso che il modo migliore sia scrivere un'utilità per provare effettivamente ad eseguirli e rollback. –

+0

Immagino di poter creare uno script dinamico che elenca tutte le procedure e tenta di eseguirle. Una parte interessante sarebbe quella di prendere in giro tutti i parametri richiesti ... Un altro modo sarebbe quello di recuperare il testo della procedura e provare a fare una "ALTER PROCEDURE" ma non modificare nulla all'interno. – CyberDude

+0

L'analisi è un primo passo utile e è possibile analizzare le stored procedure riviste per convalidarne la sintassi. Ma caricarli nel DB lo faranno, quindi non è una grande vittoria. Verificare che funzionino con un metodo normale sembra molto più utile. La risposta "unit test" fornita da OMG Ponies è piuttosto buona. –

risposta

4

Quello che descrivi è il test unitario. Le stored procedure e le funzioni spesso richiedono l'impostazione di parametri e, se la stored procedure o la funzione incapsula l'SQL dinamico, esiste la possibilità che venga omesso un caso [angolo].

Inoltre, tutto ciò che si menziona è il controllo degli errori di base - nulla sulla convalida dei dati restituiti. Ad esempio, posso modificare la precisione su una colonna numerica ...

Ciò si verifica anche nei test di base che dovrebbero verificarsi per il problema immediato e nei test di regressione per garantire che non vi siano problemi imprevisti.

1

È possibile creare tutti gli oggetti con SCHEMABINDING, il che impedirebbe di modificare le tabelle sottostanti senza perdere e ricreare le viste e le procedure create su di esse.

A seconda del processo di sviluppo, questo potrebbe essere piuttosto ingombrante. Lo offro comunque come soluzione, perché se si vuole garantire la correttezza di tutte le procedure nel db, questo lo farebbe.

0

Ho trovato questo esempio su MSDN (SQL Server 2012). Credo che può essere utilizzato in alcuni scenari:

USE AdventureWorks2012; 
GO 

SELECT p.name, r.* 
FROM sys.procedures AS p 
CROSS APPLY sys.dm_exec_describe_first_result_set_for_object(p.object_id, 0) AS r; 

Fonte: sys.dm_exec_describe_first_result_set_for_object

Problemi correlati