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

Betinget logik i PostDeployment.sql-script ved hjælp af SQLCMD

OPDATERING

Jeg har nu opdaget, at if/else-syntaksen ovenfor ikke virker for mig, fordi nogle af mine linkede scripts kræver en GO-sætning. Grundlæggende importerer :r bare scripts inline, så dette bliver ugyldig sytaks.

Hvis du har brug for en GO-sætning i de linkede scripts (som jeg gør), så er der ikke nogen nem vej uden om dette, jeg endte med at oprette flere post-deployment-scripts og derefter ændre mit projekt til at overskrive det primære post-deployment-script på byggetidspunktet afhængigt af på build-konfigurationen. Dette gør nu, hvad jeg har brug for, men det ser ud til, at der burde være en nemmere måde!

Til alle, der har brug for det samme - Jeg fandt dette indlæg nyttigt

Så i mit projekt har jeg følgende filer efter implementering:

  • Script.PostDeployment.sql (tom fil, som vil blive erstattet)
  • Default.Script.PostDeployment.sql (links til scripts, der er nødvendige for standard datakonfiguration)
  • Configuration1.Script.PostDeployment.sql (links til scripts, der er nødvendige for en specifik datakonfiguration)

Jeg tilføjede derefter følgende til slutningen af ​​projektfilen (højreklik for at fjerne og højreklik derefter på rediger):

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

Til sidst skal du opsætte matchende build-konfigurationer i løsningen.

For alle, der prøver andre work arounds, prøvede jeg også følgende uden held:

  1. Oprettelse af en post build-begivenhed for at kopiere filerne i stedet for at skulle hacke projektfilen XML. Jeg kunne ikke få dette til at virke, fordi jeg ikke kunne danne den korrekte sti til scriptfilen efter implementeringen. Dette forbindelsesproblem beskriver problemet

  2. Brug af variabler til scriptstien til at overføre til kommandoen :r. Men jeg stødte på flere fejl med denne tilgang.



  1. Opret MySQL-tabel med PHP-variabel

  2. Oracle grupper efter kun EN kolonne

  3. Klyngebekræftelsesværktøj genererer et stort antal xml-filer på "/u01" filsystem.

  4. statement.execute() returnerer fejl med skråstreg i slutningen af ​​PL/SQL