title: Would `merge` statement guarantee the same value of a `default current_timestamp` column for all inserted rows?
body: <p>I believe even within a transaction, a bunch of the insertion to a table with a <code>default current_timestamp</code> column, might have different values base on the row creation time but I'm not sure how <em>atomic</em> the <code>merge</code> statement is:</p>
  
  <p><a href="https://stackoverflow.com/questions/9871644/is-merge-an-atomic-statement-in-sql2008/9871942#9871942">Is MERGE an atomic statement in SQL2008?</a></p>
  
  <p>Here's my test script: </p>
  
  <ul>
  <li><p>Code </p>
  
  <pre><code>if type_id(N'ValuableRow') is not null 
      drop type ValuableRow
  
  create type ValuableRow as table (
      JustAValue nvarchar(max)
  )
  
  drop table if exists 
      TestTable
  
  create table TestTable(
      JustAValue nvarchar(max) 
      , Birth datetime2 default current_timestamp
  ) 
  
  go
  
  --// delete TestTable
  
  insert TestTable(JustAValue)
      values ('1234'), ('5678')
  
  declare 
      @rows ValuableRow, @alsoRows ValuableRow
  
  insert @rows(JustAValue)
      values ('abcd'), ('1234'), ('5678'), ('wxyz')
  
  merge 
      TestTable y
  using
      @rows x
  on (y.JustAValue=x.JustAValue)  
  when not matched then  
  insert (JustAValue) 
      values (JustAValue)
  output 
      inserted.JustAValue
  into 
      @alsoRows
  ;
  
  select 
      *
  from 
      @alsoRows
  
  select 
      *
  from 
      TestTable
  </code></pre></li>
  </ul>
  
  <p>and the result shows:</p>
  
  <p><img src="https://i.stack.imgur.com/dVJ4v.png" alt=""></p>
  
  <p>Apparently it's not enough to tell what would be the case if the operation took longer execution time, I'm wondering would <code>merge</code> still make all the inserted rows with the same creation time?</p>