2013-07-23 14 views
6

Sono nuovo agli strumenti di database di SQL Server e potrebbero fare ipotesi errate su ciò che gli script di post-distribuzione stanno facendo .. quindi correggimi se sbaglio.script di distribuzione post ssdt eseguito una volta

Per quanto ne so, ci si aspetta che lo script di post distribuzione venga eseguito dopo ogni distribuzione, non solo una singola distribuzione.

Se voglio che lo script di post distribuzione esegua uno script solo una volta c'è un modo per farlo senza richiedere anche una versione o una tabella cronologia nel database che registra quando questi script sono già stati eseguiti?

I.e. posso avere eventuali modifiche successive a uno script da aggiungere come nuovo file all'interno del progetto con un numero di versione, e aggiungerlo allo script di post distribuzione ma avere lo script precedente da ignorare come (potenzialmente senza prima rimuoverlo)? indipendentemente dal fatto che esegua ancora lo script durante la distribuzione?

Esiste una configurazione per questo tipo di cose o questo comportamento non voluto?

risposta

8

Pre e Post-schierare gli scritti sono progettati per essere eseguito ogni volta che si rilascia il progetto. La tua migliore pratica è renderli ripetibili. Aggiungi controlli in modo che se i dati esistono già, non si esegue nuovamente o qualcosa di simile. È possibile creare una sorta di tabella di registrazione di base per archiviare anche questo: se la riga non viene trovata nella tabella, eseguire lo script e inserire la riga nella tabella.

Non è possibile indicare al progetto di eseguire solo la versione più recente di uno script se sono presenti più script poiché sono tutti incorporati in un file PreDeploy.sql o PostDeploy.sql di grandi dimensioni. Avresti bisogno di qualcosa all'interno di ogni sezione/sceneggiatura che indichi dove guardare per sapere se eseguire o meno. Questo potrebbe essere un controllo di dati esistenti, un assegno tavolo, controllo di versione, o qualcos'altro, ma avrebbe bisogno di sapere qualche cosa usare per sapere se eseguire o meno.

Non c'è modo di disattivarlo se non commentare gli script o gestirli in qualche modo attraverso variabili SQLCMD o altri controlli. Quelli potrebbero comunque richiedere la codifica nel modo in cui ogni script dovrebbe essere eseguito o meno. Se fornisci un esempio o due di ciò che stai cercando di realizzare negli script Pre/Post Deploy, possiamo probabilmente fornire una guida migliore.

Per i nostri scopi, rendiamo riutilizzabili gli script e li rimuoviamo man mano che sono stati eseguiti. Sono ancora nel controllo del codice sorgente o è possibile utilizzare un'istantanea per archiviare quella versione del progetto prima di rimuoverli.

+0

La tua risposta va bene, è quello che mi aspettavo, mi stavo chiedendo se SSDT potrebbe avere qualche configurazione per "eseguire una volta", ma non può conoscere la risposta a se stessa. – Pricey

+1

Non sono a conoscenza di alcuna configurazione di questo tipo. Come sarebbe il progetto di sapere che è stato "eseguito una volta" in un dato database senza qualche tavolo o altro modo per fare riferimento al lavoro che si sta facendo? –

Problemi correlati