In your current setup, each of those queries is a separate transaction. Individually they are reading only committed data. But nothing is binding them together. If you want to guarantee the same underlying data for that view across both statements, you need to wrap them in a transaction, and set the isolation level to at least REPEATABLE READ on the first one (although, I haven't tried that when selecting from a View). Regardless, you can do an easy test with your code to see how your current code works and how any changes might do what you are wanting: Right before the `EXEC sp_executesql @DynamicPivotQuery` line, add the following two lines: RAISERROR('Make a change now...', 10, 1) WITH NOWAIT; WAITFOR DELAY '00:01:00.000' -- 1 minute pause Then, run the code you have posted above. When you see "Make a change now" in the Messages tab, make a change to the underlying table. Once the `WAITFOR` finishes it will run the dynamic SQL and you should see the effects of your changes.