sql >> データベース >  >> RDS >> Sqlserver

SQLCMDを使用したPostDeployment.sqlスクリプトの条件付きロジック

    更新

    リンクされたスクリプトの一部にGOステートメントが必要なため、上記のif/else構文が機能しないことがわかりました。基本的に、: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. JPA継承@EntityGraphには、サブクラスのオプションの関連付けが含まれます

    2. OracleでUTF8文字セットを構成するにはどうすればよいですか?

    3. 挿入ステートメントにIDがないOracle/PostgreSQLのシーケンス

    4. CTEでIFEXISTSを使用する