5

Supponiamo di avere un progetto di database e NON si dispone di "Ricreare sempre il database" deselezionato nelle impostazioni di Database.sqldeployment. Supponiamo che tu esegua il deploy su un server che ha già un database con il nome di quello che stai distribuendo.Come si impedisce a una distribuzione del progetto del database VS2010 di generare un database di rilascio?

In quali altre circostanze la distribuzione del database genera uno script con un'istruzione "DROP DATABASE"?

Se non si desidera mai che il database venga eliminato dallo script di distribuzione generato facendo clic con il pulsante destro del mouse sul progetto del database e selezionando "Distribuisci", quali sono alcuni dei passaggi che è possibile intraprendere per evitarlo?

+0

Qualche possibilità di pubblicare i file del progetto e delle impostazioni? AFAIK l'opzione che hai menzionato è l'unica che dovrebbe causare la scrittura di un DROP DATABASE. –

+0

Sfortunatamente no, perché il progetto appartiene al cliente. Inoltre, non riesco nemmeno a riprodurlo. Il progetto ora genera lo script senza il rilascio. Sto cercando di capire cosa potrebbe averlo causato a generare lo script in precedenza. Frank, di seguito, ha avuto una buona idea riguardo la Target Connection. Anche se la connessione target è stata impostata, è possibile che sia stata impostata solo nelle impostazioni del mio progetto e non nelle impostazioni del mio ambiente isolato. Ho anche considerato che potrebbe essere definita una connessione di destinazione, ma non essere stata VPN potrebbe averlo causato. idk. –

+0

Ah questo ha senso. Sì, le impostazioni isolate del progetto rispetto a quelle del progetto possono essere un po 'confuse. Sono lieto di aver abbandonato l'idea in SSDT. Ricordi se la distribuzione è stata eseguita in modo interattivo o se è stata eseguita da un server di build? Se era quest'ultimo, potrebbe esserci qualcosa di utile catturato nel log di costruzione. –

risposta

3

Oltre al "Ricreare sempre il database" NON selezionato, è necessario selezionare la scheda Sviluppo nella pagina Proprietà del progetto del database. Assicurati di definire una connessione di destinazione. Quando non lo definisci, il progetto verrà sempre e solo distribuito come se il database di destinazione non esistesse. Questo comportamento è di progettazione. vedi questo link per maggiori dettagli.

Il mio suggerimento è quello di creare la connessione utilizzando l'autenticazione di Windows in modo che ogni utente abbia accesso all'estensione che si suppone.

Inoltre si ricorda che si dovrà fare questo per ogni configurazione della distribuzione (ad esempio, Debug, di uscita, etc.)

io personalmente impostare l'azione Deploy per creare uno script ed eseguirlo manualmente per essere sul lato sicuro!

+1

Grazie Frank. A quanto pare, avevo una connessione di destinazione definita per quella configurazione di progetto, era una stringa di connessione valida e ho impostato l'azione di distribuzione per generare solo lo script in modo da poter eseguire manualmente da SSMS. Eppure lo script aveva ancora un'istruzione Drop. Fai alcuni ottimi suggerimenti e, anche dopo aver letto l'ottimo link che hai fornito, sento che potrebbe esserci ancora qualche altra ragione per cui il mio script di distribuzione ha generato un drop database. –