sql >> Databáze >  >> RDS >> Sqlserver

Podmíněná logika ve skriptu PostDeployment.sql pomocí SQLCMD

AKTUALIZACE

Nyní jsem zjistil, že výše uvedená syntaxe if/else pro mě nefunguje, protože některé z mých propojených skriptů vyžadují příkaz GO. :r v podstatě pouze importuje skripty inline, takže se to stane neplatnou sytaxí.

Pokud potřebujete příkaz GO v propojených skriptech (jako já), pak to není žádný snadný způsob, jak to obejít, nakonec jsem vytvořil několik skriptů po nasazení a poté změnil svůj projekt tak, aby přepsal hlavní skript po nasazení v závislosti na době sestavení na konfiguraci sestavení. Toto nyní dělá to, co potřebuji, ale zdá se, že by měl existovat jednodušší způsob!

Pro každého, kdo potřebuje totéž – Tento příspěvek považuji za užitečný

Takže v mém projektu mám následující soubory pro nasazení:

  • Script.PostDeployment.sql (prázdný soubor, který bude nahrazen)
  • Default.Script.PostDeployment.sql (odkazy na skripty potřebné pro standardní konfiguraci dat)
  • Configuration1.Script.PostDeployment.sql (odkazy na skripty potřebné pro konkrétní konfiguraci dat)

Potom jsem na konec souboru projektu přidal následující (kliknutím pravým tlačítkem se uvolní a poté pravým tlačítkem upravit):

  <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>

Nakonec budete muset v řešení nastavit odpovídající konfigurace sestavení.

Pro každého, kdo zkouší jiná řešení, jsem také bez štěstí zkusil následující:

  1. Vytvoření události po sestavení pro zkopírování souborů namísto nutnosti hackovat soubor XML projektu. Nemohl jsem to zprovoznit, protože jsem nemohl vytvořit správnou cestu k souboru skriptu po nasazení. Tento problém s připojením popisuje problém

  2. Použití proměnných pro cestu skriptu k předání příkazu :r. Ale u tohoto přístupu jsem narazil na několik chyb.



  1. Pomocí Order By v codeigniter

  2. Learning Oracle, Nastavení boolean na základě data

  3. Může EF6 generovat mé objekty modelu z referenčního kurzoru vráceného uloženou procedurou Oracle

  4. Použití keep-alive:ORA-00933:SQL příkaz nebyl správně ukončen