I have a field in one of my SQL Server Database tables which I want to increment every time a user enters a new record. I thought about a trigger, but in a multi-user environment the max function may return the wrong number. Is a stored procedure more efficient?
There is a built in function called the Identity function that does what you want, but I would recommend that instead of the Identity function, you instead create your own numbering scheme.
In your database, create a table named id, and make its columns id and tablename. Put an update trigger on the table that increments id by one. Fill up this new table with the table name of each of your existing tables, and in the id column put the highest id used in that table.
Now, every time you need an id, you search the id table for the name of the table that needs the id, look up the id, increment it, and use it for the operation that requested it. This works most transparently with integer keys, but it can also work with other key schemes with a little hacking.