SELECT blocks UPDATE in Snapshot Isolation
if @@trancount &lt;> 0 then that SELECT will run with the current transaction isolation level.  Which (unless it already happens to be SNAPSHOT) will require S locks for reading data.

If you want all SELECTS using the default READ COMMITTED isolation level to use row versioning instead of S locks, set READ COMMITTED SNAPSHOT on the database.