Hello Heixian. I've had the unfortunate pleasure of authoring and maintaining (5 years) an application that was written in traditional ASP/MSSQL that relied on dynamically creating database. I say unfortunate because, it was just that, a very unfortunate design decision that we had to live with.
There is only one technical limitation in Microsoft SQL Server (albeit very difficult to reach), there is an artificial limitation of 32,767 databases on a single instance of sql server. I can't fathom anyone reaching this many databases, but their are consequences to pay for having a large amount of databases on the same server. You can review my discussion dialog on the MSDN forums relating to this topic (
http://forums.microsoft.com/MSDN/ShowPo ... 3&SiteID=1).
Now, from a developers perspective. Unless you have purchased a tool, such as ApexSQL Diff, managing an evolving schema is going to be tricky, not impossible but it will take some patience and concentration. The application I worked on used a very simple approach to creating the database, we created a SQL file that included the "CREATE DATABASE" command and the required commands for the contained schema (tables, sprocs, functions, etc). The script had tokens that were replaced prior to execution, e.g. "CREATE DATABASE <%DatabaseName%>" (we simply stuck with the ASP stile code block tag).
Getting the software to create the databases was trivial, but we found out the hard way that trying to make changes to the schema once 3000 databases were created was next to impossible without a good tool (that supported transactions).
I would highly recommend that you go with your first option. All you need to do is take into account that each table have rows that belong to multiple users (can be abstracted in your dataaccess layer). The only disadvantages that I can see is overall database size and single point of failure. If for some reason the database becomes corrupt (malformed SQL ) you risk data loss (unless of course you have a well implemented backup plan, you do right?:)). As far as database size goes, i know each version of SQL Server (Dev, Standard & Ent) each have limitations on database size. But if you exceed the single database size you can easily scale to multiple servers or multiple databases.
Alright, that's the run down on my experiences and thoughts relating to your problem. If you have any questions, just reply.
-Beau