All we need is an easy explanation of the problem, so here it is.
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)?
How to solve :
I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.
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:
- A unique index on the column(s) (possibly created using a unique constraint).
- The table has a column having the IDENTITY property.
- A column of the uniqueidentifier data type (but that could very well also be a foreign key).
- 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.
Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂