1. If pulling the rows to a temporary table and putting them back works for your situation, go with it. However, it may cause you more work and the related chance for bugs than with a more direct approach.
2. Regarding Views. Yes they are static. You can't pass them a parameter, so you would create one for each user. You can update the underlying table through simple views, as long as you are not doing aggregation or joining to too many other tables in the view. there cannot be any ambiguity. For something you can pass a parameter to, look into a user defined function which returns a table as a result set. You can use it in the from clause like a table and also pass it a parameter for it to filter on. However, you cannot update through it.
3. This would be my choice. Out of the box, this is the way Oracle works. Readers don't block writers, writers don't block readers, no one see a new version of the data until the transaction is committed. In SQL Server 2005, you have to flip a couple of switches to turn it on.
SQL Server 2005 Row Versioning-Based Transaction Isolation:
http://msdn.microsoft.com/en-us/library/ms345124%28SQL.90%29.aspx
Using Row Versioning-based Isolation Levels:
http://msdn.microsoft.com/en-us/library/ms179599.aspx
You have to go with what you understand and can implement successfully. But, it could be a learning experience to research and implement a newer method.
..dbi