I liked Sean's answer and it worked for me. You can add an offer.
WHERE t.TABLE_TYPE = 'BASE TABLE'
before the EXCEPT statement if you do not want to receive views as well.
;WITH tables_with_pk AS ( SELECT t.table_schema, t.table_name FROM INFORMATION_SCHEMA.TABLES t INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON t.TABLE_NAME = tc.TABLE_NAME AND t.table_schema = tc.table_schema WHERE tc.constraint_type = 'PRIMARY KEY' ) SELECT t.table_schema, t.table_name FROM INFORMATION_SCHEMA.TABLES t WHERE t.TABLE_TYPE = 'BASE TABLE' EXCEPT SELECT table_schema, table_name FROM tables_with_pk
source share