Using SQL Server Snapshot Isolation is it possible to determine a row being read is not the latest? I understand that starting a transaction under the SNAPSHOT isolation level means that any subsequent SELECT statement will provide data as it was when the transaction was started.
The following statement, for example, will return data from the table without blocking writers as well as ignoring subsequent changes:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT

BEGIN TRANSATION

SELECT  col1, col2, [something here to tell me the row is out of date]
FROM    dbo.SomeTable st
WHERE   (st.SomeForeignKey = @SomeValue)

COMMIT TRANSATION

Is there a performant way of knowing whether a record retrieved from this SELECT statement has been modified since the transaction was started (without running the entire thing again)?
As far as I know there is no way to do this, you can see how many rows are in tempdb using a query like the below
SELECT  version_ghost_record_count
  FROM  sys.dm_db_index_physical_stats
    (
        DB_ID(),
        OBJECT_ID(N'dbo.sometable', N'U'),
        1,
        NULL,
        N'DETAILED'
    )
  WHERE index_level = 0

but this will only tell you at a table level (or partition if you are using those) &amp; you want to get down to row level, more info here :-
https://www.red-gate.com/simple-talk/sql/performance/read-committed-snapshot-isolation-high-version_ghost_record_count/