Apologies for the long comment here but this article really got me thinking...
Building an automated and repeatable process for building and maintaining databases is really the holy grail of release management.
Tools like RedGate's line of products including Compare/Data Compare have gone a long way towards lowering the barrier to entry for doing this, and SQL Source Control is a logical addition to the product suite. I would go as far as to say it easily rivals the capabilities of the current Visual Studio-based database projects.
A bit of background on our shop. We have been utilising a deployment process built on RedGate's toolstack (including the excellent Compare API) and also TeamCity + MSBuild and the results have been great... for the most part. The part where it can get tricky is when we have a mix of auto-generated SQL Compare scripts and our own custom scripted migrations: sometimes we need to perform SQL operations not possible in RedGate tools like renaming a table or column, configuring Change Data Capture instances, or performing complex refactorings like splitting a table in two.
Even combining Compare and Data Compare has its challenges, especially when trying to create a new source controlled table and populate it with static data in one atomic transaction. Trying to include these kinds of migrations as separate steps in our build process has resulted in a bit of a "meatball sundae": two things nice on their own but don't mix terribly well!
We've also found that putting in place code review practices with the RedGate scripts has proven to be challenging given that the auto-generated scripts exist outside of source control as build artifacts (as they should be). It means that the DBA's need to look in two places to do code review, and they also need to review scripts for each environment (DEV, STG, QA, PROD etc).
We don't have a solution to these issues right now and the level of automation and dynamism these tools allows will keep us using RedGate for the moment, but I would definitely encourage readers to consider alternative approaches to source controlling and releasing databases prior investing in a tool, as we now are. Two notable contenders:
* Liquibase http://www.liquibase.org/ . A vendor-agnostic approach to database refactoring that allows targeting of multiple RBDMS platforms (i.e. MSSQL, MySQL, Oracle etc) using a special migration language. A highly structured way of applying database changes that is optimised for parallel development.
* DBDeploy http://dbdeploy.com/ . Migrations are hand-written and are executed in a simple predefined sequential order (i.e. Script 1, Script 2, Script 3). The target database keeps a record of which have been executed and never runs the same script twice. As simple as it gets really. Supports many RDBMS platforms.
Of course these tools don't offer the same wonderful intuitiveness of the RedGate products as Troy has eloquently pointed out here, but they do achieve the goal of enabling developers to autonomously work in their own sandbox by allowing the database to be fully reproducible from source control.