Trovare le tabelle senza chiave primaria (MSSQL)
Updated at: 09/10/2014


Se un database non è stato progettato molto bene, potrebbe contenere delle tabelle senza alcuna chiave primaria. In tal caso alcune cose non potrebbero funzionare bene. Ad esempio i vari tools per interagire in modo decente con MS SQL permettono di fare le modifiche ai record SOLO se esiste una chiave primaria (singola o multicolonna, è indiferente) per quella tabella (GIUSTAMENTE!). Per trovare (e quindi correggere) tutte le tabelle "incriminate" - senza aprirle tutte in modalità "Design" una ad una - si può utilizzare questa query:
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name NOT IN
      (SELECT table_name FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
       WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1)
ORDER BY table_name
che restituisce appunto tutte le tabelle prive di chiave primaria. Se vogliamo eseguire la stessa ricerca su un DB MySQL, usiamo la query indicata in questo post