sql >> Database >  >> RDS >> Sqlserver

Voorwaardelijke logica in PostDeployment.sql-script met SQLCMD

UPDATE

Ik heb nu ontdekt dat de bovenstaande if/else-syntaxis niet voor mij werkt omdat sommige van mijn gekoppelde scripts een GO-instructie vereisen. In wezen importeert de :r de scripts gewoon inline, dus dit wordt een ongeldige sytax.

Als je een GO-instructie in de gekoppelde scripts nodig hebt (zoals ik), dan is er geen gemakkelijke manier om dit te omzeilen. op de buildconfiguratie. Dit doet nu wat ik nodig heb, maar het lijkt erop dat er een eenvoudigere manier zou moeten zijn!

Voor iedereen die hetzelfde nodig heeft - Ik vond dit bericht nuttig

Dus in mijn project heb ik de volgende post-implementatiebestanden:

  • Script.PostDeployment.sql (leeg bestand dat zal worden vervangen)
  • Default.Script.PostDeployment.sql (links naar scripts die nodig zijn voor standaard dataconfiguratie)
  • Configuration1.Script.PostDeployment.sql (links naar scripts die nodig zijn voor een specifieke gegevensconfiguratie)

Ik heb toen het volgende toegevoegd aan het einde van het projectbestand (klik met de rechtermuisknop om te verwijderen en klik met de rechtermuisknop op bewerken):

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

Ten slotte moet u overeenkomende buildconfiguraties instellen in de oplossing.

Ook voor iedereen die andere tijdelijke oplossingen probeert, heb ik ook het volgende geprobeerd zonder enig geluk:

  1. Een post-build-gebeurtenis maken om de bestanden te kopiëren in plaats van het XML-projectbestand te hacken. ik kon dit niet laten werken omdat ik niet het juiste pad naar het post-implementatiescriptbestand kon vormen. Dit verbindingsprobleem beschrijft het probleem

  2. Variabelen gebruiken om het scriptpad door te geven aan de opdracht :r. Maar ik kwam verschillende fouten tegen met deze aanpak.



  1. Hoe voeg ik een waarde in een select-instructie in met JavaScript, met name bij het gebruik van express en postgre?

  2. MySQL-syntaxisfout

  3. Unicode-tekenreeks (हिन्दी) opslaan en weergeven met behulp van PHP en MySQL

  4. Hoe verwijder ik voorloop- en volgspaties in een MySQL-veld?