A Google search spewed forth millions of hits on how to find tables without clustered indexed, the PK normally being the clustered index of a table. However, a table could easily have a natural key as a clustered index, and a non-clustered surrogate index, like an identity column.
How do I find all tables in a DB without a primary key defined? I have 245 tables in this DB: manual inspection is grossly inefficient.
Best Answer
Couple ways to skin this cat but this works fine in SQL Server 2005 and up, and I find it a pain free way to handle the problem -
The
OBJECTPROPERTY()
function can list various properties about objects - like tables. One of those properties is whether or not a table has a primary key.OBJECTPROPERTY(object_id, tablehasprimarykey)
= 0 would be a table without a primary key.So
Should give you what you need. You can see all about the other ways to use the OBJECTPROPERTY() function in books online. This is the 2012 version of the article.