i spent a bit of time on this same thing before, and it really depends on the results you are looking for, and how deep you want to make them match.
if you just want to be aware of differences, you could use an EXCEPT query against each database, comparing it to the "perfect" customer model, and for things like sys.tables + sys.columns.
if you need the script to be generated to change the database to match the "perfect" customer model, that's where it gets tougher...
there's functionally equivalent, and that gets involved;
for example, views/functions/stored procedure definitions might be different due to white space and comments, but are actually the same ; in a programming language you can strip out comments, then white space, and compare the results to see if they really are the different or functionally the same.
Also for table definitions , maybe you don't care about constraint names, but you do care about that the constraints exist; and whether there's the desire for exact matches, where renaming of matching-but-wrongly-named constraints is required.
I've created my own crap-tastic app to do that for myself, and it gets bigger all the time as i peel back the next layer of making databases match to another.
It makes me appreciate just how much effort and man hours Redgate must have poured into their Compare product.
--help us help you! If you post a question, make sure you include a CREATE TABLE... statement and INSERT INTO... statement into that table to give the volunteers here representative data. with your description of the problem, we can provide a tested, verifiable solution to your question! asking the question the right way gets you a tested answer the fastest way possible!