Take a look at message 474053 which describes our method.
http://www.sqlservercentral.com/Forums/FindPost474053.aspx
I describe how we store each object as a separate file in the source code control system (currently Perforce, but Visual SourceSafe before), address the CREATE/ALTER/DROP issue with stored procedures, etc. and guarantee that the upgrade script is consistent.
Not all of the tools will generate a proper "upgrade" script.
Examples:
In our last upgrade we needed to change an XML schema collection. This required that we properly "unwind" any bindings, make the change, and then rebind the XML schema to the various objects. An interesting sequence of operations that I doubt any software tool will do.
Often, as part of a schema change we need to change some meta data values that are stored in tables.