• subscribe
July 24, 2003 12:00 AM

Using Datetime Columns as Primary Keys

SQL Server Pro
InstantDoc ID #39448
Downloads
39448.zip

I'm using a datetime column in SQL Server 2000 as a unique key, and I'm trying to query the data using a Microsoft Access form. I can query the data, but when I try to create two new rows that have primary keys, such as 2003-04-17 00:00:00:00 and 2003-04-17 00:00:00:01, I get an error message indicating that I've entered a duplicate key. What's the problem?

Datetime values are accurate only to within 3ms, and smalldatetime values are accurate only to within a minute. For comparison purposes, SQL Server rounds these values. For example, SQL Server treats 2003-04-17 00:00:00:00 and 2003-04-17 00:00:00:01 as identical values during an equality operation. In addition, SQL Server treats them as identical when checking whether a UNIQUE constraint or primary key is truly unique. The scripts that Listing 2 shows both produce an error that proves this rounding behavior. (For more information about SQL Server datetime data types, see the SQL Server Books Online—BOL—topic "Datetime and Smalldatetime.")

A basic database-design principle is that a primary key must always be unique. And because SQL Server can't differentiate between datetime values that are within a narrow range, you must never use a datetime column as a primary key in SQL Server. If you do, you'll get the following error message:

Server: Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK__
DateTimeTest__29221CFB'. Cannot insert duplicate
key in object 'DateTimeTest'.
The statement has been terminated.


ARTICLE TOOLS

Comments
  • Marcos
    3 years ago
    Mar 18, 2009

    Good tip, besides this topic has been mentioned in other articles. Looks like the magazine keeps comming back to the same subject from time to time. Is this due a lack of subject?

    Regards.

You must log on before posting a comment.

Are you a new visitor? Register Here