SQL Server - Timestamp Column

ben himself's picture

While this seems like a simple thing to do, I recently discovered so many ways not to do it (also known as failing) that I just had to document this one.

It is very common to want a column of your SQL table to be a timestamp of when the row was written.  At times like these, it's nice to know that there is a "Timestamp" datatype... that does not help at all.  So, how do you do it?

Solution: "datetime" Datatype

The data type must be "datetime" and the Default Value or Binding must be "getdate()".  When I filled in the Default Value or Binding, I used "CURRENT_TIMESTAMP", which was automatically updated to "getdate()", as seen below.


Timestamp Datatype

So what about the "timestamp" datatype?  Microsoft states:

The Transact-SQL timestamp data type is not the same as the timestamp data type defined in the SQL-92 standard. The SQL-92 timestamp data type is equivalent to the Transact-SQL datetime data type.

In other words, in SQL Server, if you want a timestamp, don't use "timestamp", use "datetime".  If you use the "timestamp" datatype, you'll see data like this in your table: