One thing to note is that very rarely does someone need to ask the question "MySQL vs. MS SQL?"
If you can honestly ask that question, then you don't need the laundry list of things that mysql doesnt offer. Actually whats annoying is, it means you might not know that you need them, and when you find out later it'll be a pain to move.
Generally I follow these rules
MySQL-
If one and only one application is going to write to the database
An overwhelming percentage of this databases operations will be reads (>95%)
The complexity of the database will not be great (fewer than 10 tables, mostly simple two-table joins)
And the accuracy of the data is not deadly critical (say 1% margin of error on all your calculations like "total sales")
You'll note this makes it perfect for small and simple web applications. Hence its popularity in that market.
MS SQL -
If multiple applications are going to be writing and reading from the database
The database is highly normalized, with multiple complex joins being employed (often through views to simplify applications)
Failover clustering needs to be implmented.
IMHO one of the biggest distinctions is multiple application access. There are some things like check constraints, stored procedures, and triggers which you absolutly need to build some logic into your database if mutiple applications are going to be using it. Otherwise you would have to waste time building all that logic into each application, and the risk of bugs, errors, version differences, etc is to much.
However if you have just one application using it (as is often the case in web apps), you can build all that logic into your application as you'll only need to code it once. In that case it doesnt matter so much that the database doesnt support things.
Another issue is complexity. MySQL does great for simple 1 - 4 table aplications with mostly non-joined queries. It falls down pretty fast if you get more complex that that. Both in performance, and in feature support. Subselects, and complex joins aren't even possible, and check constraints & true referential integrity aren't available. The former makes apps more complex, and the later makes data less trustworthy.
Clustering is another perk to MS. It can be done with mysql, and I have set it up in several production servers but its a custom build solution with a fair number of issues. And it also is somewhat odd because fundamentally if your data is that important you probably also want features like transactions in your RDBMS, so you wouldn't be using mysql.
With MS its a very well documented very easy thing to do, and with much better support for shared storage. And most of all its an intergrated process, not 20 different scripts and daemons to figure out.
Keep in mind there is the other ultimate concern. MS can start to cost you a pretty penny fast as you need more and more servers.
ok, enough rambling
[edit]btw this is all relevant to mysql 3.23.* People can nitpick about alternative table types and the new stuff in 4.0, but frankly one of the things a business has to understand first about open source is that just because its been hacked in somewhere, doesnt mean its something you want to jump into relying on. You gotta play it more conservitive than that if you plan on really relying on the software or system.[/edit]