I understand your point of view, however our unit tests run on live databases over the network, all 8000+ of them complete in less than 4.5 minutes (I measured it just yet to be certain, and that's a combined 1 minute of waiting for the thread deadlock to kick in for the transient error recovery tests ). So it's not as bad as you think it is
The other thing to consider is that if you want to mock DB access, like I said, you can mock the IDataAccessAdapter interface which is implemented on the DataAccessAdapter, the object which executes queries.
I deliberately mentioned live testing on an actual database as in our field that's the recommended way to test database targeting code, because it'll avoid you running into database specific issues later on which might force you to redesign your architecture. But it's up to you of course.