I just came across a post from Ed Elliot (b | t ) about running Scripts before the SQL Package process runs. Sort of a “Pre” Pre-deploy script. The concept is simple enough, but it’s something people have wanted for a while.
The general idea is that you add a SQL Script to your project with:
Build Action = “None”
Copy To Directory = “Copy Always” (or “Copy if Newer”)
When you set up your publish actions, look for this script first, run it in PowerShell, SQLCMD, or whatever other option you might have, then run your SQLPackage commands as normal. It will run through whatever scripts you want to run first, then compare against the modified database to bring it up to date.
The idea is pretty clever, though I haven’t come across a lot of need for it when trying to deploy DB changes. I’m not quite comfortable with a script running to change the state of the database to something unknown prior to running the script to bring it in line with version control. I suppose it has some use-cases, though, as I’ve come across this request several times on Stack Overflow.