Ugh. I feel that the entire question is loaded.
Sticking business logic into a stored proc, is widely agreed as being a bad idea. I'm sure there are probably cases where it makes sense (perhaps the system is only a db, and doesn't have a gui or anything else?), but I'm not convinced I can think of any!
I think that anyone saying "stored procs are always bad" is not really understanding the (not so) subtle differences between stored procedures and inline SQL. There are benefits, but what you need to work out is whether those benefits have any real consequence to what your functional and non functional requirements are. If they don't, then do whatever is easiest.
One thing I do agree with is that it makes releasing software easier... since schemas tend not to change frequently, but code does. Often someone forgets to release a stored procedure change or trigger change.
One thing I think many people forget is that without triggers and referential integrity you open yourself up to the potential issue that someone in your support team accidentally forgets to update that other, new table or puts a typo in. Triggers, can in some cases help. (Don't forget that triggers are really stored procedures with a bit of a twist, so we ought to include these in the discussions).
I disagree with Jeff's article. His point that 'However, there's one small problem: none of these things are true in practice.' is something easy to feel is incorrect. In the average case he may be correct, but as you start pushing the limits of the technology then you start running into scenarios where the differences between the two have real impact. To mention a few: performance, expected explain plan and refactoring.
- You know what depends on your tables, so you know what to refactor. Ever tried searching through code to work out what tables your different applications depend upon? In the better dbs you can always do a 'depends' to help work out the consequences.
- The security argument is is useful, since you know that app A which comes directly to your DB (which happens in real life) is actually only accessing tables x, y and z via stored procedures x and y. Perhaps when we come back in ten years and the system is still running and you have to migrate it to the latest version or decommision it then you'll see how important this is.
One point I'd like to also rubbish is the argument that only x of our developers can debug a stored procedure. Woooah! Hang on, are you suggesting that you have developers writing SQL who aren't able to write a stored proc? That sounds really worrying to me, since they're pretty similar. What else about the database do these developers not know?
At the end of the day, keep data constraints in your database, and put your business logic somewhere else. The argument between sp's and written sql (I'm not talking about dynamic sql) has to be taken on a case by case basis.
I discussed the problems that adding .NET languages to the new SQL server would have with someone from MS and they agreed that the business logic shouldn't be in the server, and that wasn't something they were really encouraging with adding .NET in. :/