Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Условна логика в скрипт PostDeployment.sql, използващ SQLCMD

АКТУАЛИЗАЦИЯ

Сега открих, че синтаксисът if/else по-горе не работи за мен, защото някои от моите свързани скриптове изискват оператор GO. По същество :r просто импортира скриптовете на линия, така че това става невалиден ситаксис.

Ако имате нужда от оператор GO в свързаните скриптове (както аз правя), тогава няма лесен начин да заобиколя това, в крайна сметка създадох няколко скрипта за след внедряване и след това промених проекта си, за да презапиша основния скрипт за след внедряване по време на изграждане в зависимост върху конфигурацията на компилацията. Сега това прави това, от което се нуждая, но изглежда, че трябва да има по-лесен начин!

За всеки, който се нуждае от същото нещо - Намерих тази публикация полезна

Така че в моя проект имам следните файлове за след внедряване:

  • Script.PostDeployment.sql (празен файл, който ще бъде заменен)
  • Default.Script.PostDeployment.sql (връзки към скриптове, необходими за стандартна конфигурация на данни)
  • Configuration1.Script.PostDeployment.sql (връзки към скриптове, необходими за конкретна конфигурация на данни)

След това добавих следното в края на файла на проекта (щракнете с десния бутон за разтоварване и след това щракнете с десния бутон за редактиране):

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

И накрая, ще трябва да настроите съответстващи конфигурации на компилация в решението.

Също така, за всеки, който опитва други решения, аз също опитах следното без никакъв успех:

  1. Създаване на събитие след изграждане за копиране на файловете, вместо да се налага да хакнете XML файла на проекта. не можах да накарам това да работи, защото не можах да оформя правилния път към файла със скрипта след внедряване. Този проблем със свързването описва проблема

  2. Използване на променливи за пътя на скрипта за предаване на командата :r. Но се натъкнах на няколко грешки с този подход.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разделяне на низ чрез sql оператор (ip адрес)

  2. Извличане на дефиниция на колона за набор от резултати от запомнени процедури

  3. SQL Server 2008 - разделяне на колона с множество стойности на редове с уникални стойности

  4. Свързване към MS SQL Server с удостоверяване на Windows с помощта на Python?

  5. Как да премахнете всички първични ключове от всички таблици в базата данни на SQL Server - SQL Server / TSQL урок, част 65