Currently, we manage database (SQL Server) changes with a series of numbered scripts. One folder holds scripts that can only be run once (table alters, data initialization, etc). Another holds all scripts that can be run multiple times without fear of them destroying anything (stored procedures, functions, etc).
Typically, when we need to make a change to the database, we'll create a script for the change, number it, stick it in the appropriate folder, and commit it. When we do pushes, I keep notes on the last number that was run, and run all of the subsequent scripts. I know there's a better way to do this, but I wanted to get your opinion on methods that work for you. I'm OK with a commercial solution, but an open source or free one would be preferred.
My motivation for this is that I don't want to have to think about what's changed, and I want to cut as much human error out of the process as possible.
EDIT: Just to clarify, this is an ASP.NET app, with SQL Server. We currently do version control with Subversion.