Finding Potential Primary Key In Tables

sql serversql server 2014

I have tables(more than 100) that are missing primary keys. Actually, these are legacy tables. Now as per some replication requirements, we need to add primary key on each of these tables. Is there any way to find out possible primary keys on a table (ready to purchase a commercial product)?

Best Answer

You need to define the criteria for what constitutes a "possible primary key". When you have done that, you/we can search for (for instance sp_special_columns) or produce a script that uses that criteria. Such criteria could be:

  1. A unique index on the column(s) (possibly created using a unique constraint).
  2. The table has a column having the IDENTITY property.
  3. A column of the uniqueidentifier data type (but that could very well also be a foreign key).
  4. A column or set of columns which in the data has no duplicates.

For 3 and 4, you are gambling, since having no duplicates today is not guarantee that there should be duplicates tomorrow.

In general, there is a risk messing about in a database unless you own the database. Say that you slap on an identity column on each table, make it the PK, just so you can use replication. Now, there might be some code that does SELECT * and breaks down because it now gets this additional column that you added.