anchor.diff:      /// Recreates the database from scratch on publish (rather than an in-place update). Defaults to false.
       RecreateDb : bool
       /// Additional configuration parameters required by sqlpackage.exe
  -    AdditionalSqlPackageProperties : (string * string) list }
  +    AdditionalSqlPackageProperties : (string * string) list
  +    /// SQLCMD variables
  +    Variables : (string * string) list }
   
   let validPaths =
       let getSqlVersion (path:string) = path.Split '\\' |> Array.item 3 |> int
  
positive.code:           
      shellExec {
          Program = args.SqlPackageToolPath
          CommandLine = sprintf """/Action:%s /SourceFile:"%s" /TargetConnectionString:"%s" %s /p:BlockOnPossibleDataLoss=%b /p:DropObjectsNotInSource=%b /p:CommandTimeout=%d /p:CreateNewDatabase=%b %s""" action args.Source args.Destination outputPath args.BlockOnPossibleDataLoss args.DropObjectsNotInSource args.Timeout args.RecreateDb additionalParameters
          WorkingDirectory = ""
          Args = [] }
  
  
negative.code:     let args = setParams defaultDeploymentArgs
      let action, outputPath = generateCommandLine args.Action
  
      let concat parameter =
          List.map (fun (key, value) -> sprintf "/%s:%s=%s" parameter key value)
          >> String.concat " "
  
      let additionalParameters = args.AdditionalSqlPackageProperties |> concat "p"
  
      let variables = args.Variables |> concat "v"
  
      if System.String.IsNullOrWhiteSpace args.SqlPackageToolPath then
          failwith "No SqlPackage.exe filename was given."
  