FAKE - F# Make - A DSL for build tasks and more FAKE
6.1.3
Edit this page

Lookig for older versions of the documentation, pre FAKE v6? See 

v5.fake.build

Packaging and Deploying SQL Databases

FAKE can be used to create a SQL DACPAC and also deploy it to a SQL Server using the MSDeploy executable. This is installed by default with Visual Studio and with the SQL Server Data Tools (SSDT) package.

DACPACs automatically diff from the source to the destination and generate the SQL script dynamically.

You can read up more on DACPac and MSDeploy arguments here.

Sample usage

Ensure that you have already built your database project (you can do this with standard MSBuild). Then, use the deployDb command to deploy the dbProject.dacpac to the myDatabase.

    open Fake.Sql

    /// the database for local development + compile
    Target.create "DeployLocalDb" (fun _ ->
        let connectionString = "Data Source=(localdb)\\MSSQLLocalDB;Integrated Security=True;Database=MyDatabase;Pooling=False"
        let dacPacPath = "path/to/dbProject.dacpac"
        SqlPackage.deployDb (fun args -> { args with Source = dacPacPath; Destination = connectionString }) |> ignore
    )

The following sample shows how to deploy a database project to Azure using an access token:

    open Fake.Core
    open Fake.Sql

    /// the database for local development + compile
    Target.create "DeployLocalDb" (fun _ ->
        let dacPacPath = "path/to/dbProject.dacpac"
        let accessToken = "your-access-token"
        let connectionString = "Data Source=your-server-name.database.windows.net; Initial Catalog=your-database-name;" 
        SqlPackage.deployDb (fun args -> 
            { args with 
                    Destination = connectionString
                    AccessToken = accessToken
                    Source = dacPacPath 
            }) |> ignore
    )

Deployment Options

You can optionally specify the type of command to use (again, refer to the documentation above for more detail): -

In addition, you can also elect to deploy to Dacpac files rather than SQL databases - simply pass in the pass to the dacpac that you wish to generate.

Arguments

You can provide following arguments (in brackets are given sqlpackage.exe parameters name):

If both DAC Publish Profile file and command line parameters provides the same argument, then the one from command line overwrites publish Profile value. An example: if Profile File has BlockOnPossibleDataLoss set to true and command line set it to false, sqlpackage.exe set BlockOnPossibleDataLoss to false.