I think it'll be recipe for problems, no matter what you try... The thing is that you always have to lock the whole table to make sure the counter is uninterrupted. This is a fallacy, you can't achieve it. E.g. you insert and it fails for some reason, and another thread also does an insert and it succeeds. It's similar to inserting a pk based on 'the highest number in the table' +1.
the sequence for the counter is unique per date I recon, or unique per table? because if it's the latter, you can change the field to an identity field, set the sequence to start at the last value in the table and simply insert as normal.