The ROWVERSION
data type is one possibility, although it's not suitable for use as a primary key; it is also automatically set.
Another option would be to create it yourself. Have a table with a column of the width you require, and have some code that atomically increments the value and returns it. With appropriate locking or transactions, you could use that to generate a value that would be suitable as a primary key.
You could also do something similar with a SQL CLR function. It might be possible to make it more efficient that way, too. For example, you could use the current time, but store the last value returned in a static. Then, if the next value is the same as the last one, increment by one.