Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Logika warunkowa w skrypcie PostDeployment.sql przy użyciu SQLCMD

AKTUALIZUJ

Odkryłem, że powyższa składnia if/else nie działa dla mnie, ponieważ niektóre z moich połączonych skryptów wymagają instrukcji GO. Zasadniczo :r po prostu importuje skrypty w linii, więc staje się to nieprawidłową składnią.

Jeśli potrzebujesz instrukcji GO w połączonych skryptach (tak jak ja), to nie ma łatwego sposobu na obejście tego, skończyło się na utworzeniu kilku skryptów po wdrożeniu, a następnie zmianie mojego projektu, aby nadpisać główny skrypt po wdrożeniu w czasie kompilacji, w zależności od w konfiguracji kompilacji. Robię teraz to, czego potrzebuję, ale wydaje się, że powinien być łatwiejszy sposób!

Dla każdego, kto potrzebuje tego samego - Uważam ten post za przydatny

Tak więc w moim projekcie mam następujące pliki po wdrożeniowe:

  • Script.PostDeployment.sql (pusty plik, który zostanie zastąpiony)
  • Default.Script.PostDeployment.sql (linki do skryptów potrzebnych do standardowej konfiguracji danych)
  • Configuration1.Script.PostDeployment.sql (łącza do skryptów potrzebnych do określonej konfiguracji danych)

Następnie dodałem na końcu pliku projektu (kliknij prawym przyciskiem myszy, aby wyładować, a następnie kliknij prawym przyciskiem myszy):

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

Na koniec musisz skonfigurować pasujące konfiguracje kompilacji w rozwiązaniu.

Ponadto, dla każdego, kto próbuje innych obejść, bez powodzenia wypróbowałem również następujące rozwiązania:

  1. Tworzenie zdarzenia po kompilacji w celu skopiowania plików zamiast hakowania pliku projektu XML. nie mogłem zmusić tego do pracy, ponieważ nie mogłem utworzyć prawidłowej ścieżki do pliku skryptu po wdrożeniu. Ten problem z połączeniem opisuje problem

  2. Używanie zmiennych dla ścieżki skryptu do przekazania do polecenia :r. Ale przy takim podejściu natknąłem się na kilka błędów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmienianie kolumny tabeli w celu zaakceptowania większej liczby znaków

  2. Eksportuj wynik zapytania do pliku .csv w SQL Server 2008

  3. Policz na podstawie warunku w SQL Server

  4. Odświeżanie metadanych funkcji użytkownika t-SQL

  5. Podłączanie Genero do SQL Server