Hi,
One of the problems is that in normal operation shared locks are needed for example to prevent dirty reads.
One possibility is to use row versioning which is defined at database level:
Data versioning in SQL Server using row versions[
^]. Actually this isn't exactly what you asked since locks are still used but for example exclusive locks won't block reading anymore etc.
Regards,
mika