Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Logica condizionale nello script PostDeployment.sql tramite SQLCMD

AGGIORNAMENTO

Ora ho scoperto che la sintassi if/else sopra non funziona per me perché alcuni dei miei script collegati richiedono un'istruzione GO. In sostanza :r importa solo gli script inline, quindi questa diventa una sintassi non valida.

Se hai bisogno di un'istruzione GO negli script collegati (come me), allora non c'è un modo semplice per aggirare questo problema, ho finito per creare diversi script di post-distribuzione e quindi modificare il mio progetto per sovrascrivere lo script principale di post-distribuzione in fase di compilazione a seconda sulla configurazione di build. Ora sto facendo ciò di cui ho bisogno, ma sembra che dovrebbe esserci un modo più semplice!

Per chiunque abbia bisogno della stessa cosa - Ho trovato utile questo post

Quindi nel mio progetto ho i seguenti file di post-distribuzione:

  • Script.PostDeployment.sql (file vuoto che verrà sostituito)
  • Default.Script.PostDeployment.sql (collegamenti agli script necessari per la configurazione dei dati standard)
  • Configuration1.Script.PostDeployment.sql (collegamenti agli script necessari per una specifica configurazione dei dati)

Ho quindi aggiunto quanto segue alla fine del file di progetto (fare clic con il pulsante destro del mouse per scaricare e quindi fare clic con il pulsante destro del mouse per modificare):

  <Target Name="BeforeBuild">
      <Message Text="Copy files task running for configuration: $(Configuration)" Importance="high" />
      <Copy Condition=" '$(Configuration)' == 'Release' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
      <Copy Condition=" '$(Configuration)' == 'Debug' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
      <Copy Condition=" '$(Configuration)' == 'Configuration1' " SourceFiles="Scripts\Post-Deployment\Configuration1.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
  </Target>

Infine, dovrai configurare le configurazioni di build corrispondenti nella soluzione.

Inoltre, per chiunque provi altre soluzioni alternative, ho anche provato quanto segue senza fortuna:

  1. Creazione di un evento post build per copiare i file invece di dover hackerare il file di progetto XML. non sono riuscito a farlo funzionare perché non sono riuscito a formare il percorso corretto per il file di script di post-distribuzione. Questo problema di connessione descrive il problema

  2. Utilizzo delle variabili per il percorso dello script da passare al comando :r. Ma mi sono imbattuto in diversi errori con questo approccio.