T-SQL - OBJECTPROPERTY e tabelle senza chiavi
Avevo letto su qualche blog, ma ora non ricordo. Comunque per avere velocemente un elenco di tabelle di un dato database che sono prive di chiave primaria, basta sfruttare la funzione OBJECTPROPERTY(id, property). Per dettagli rimando alla guida on-line: OBJECTPROPERTY (Transact-SQL).
Tra le property che si possono specificare, infatti, è presente anche TableHasPrimaryKey, che svolge per l’appunto il compito che ci serve.
La banale query risulta quindi essere una cosa del tipo:
SELECT name AS tableName
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, ‘TableHasPrimaryKey’) = 0
ORDER BY tableName
Cambiando la property ad esempio in TableHasIdentity ecco che potremmo avere l’elenco delle tabelle che hanno per l’appunto un campo identity:
SELECT name AS tableName
FROM sys.tables
WHERE OBJECTPROPERTY(object_id, ‘TableHasIdentity’) = 1
ORDER BY tableName
Ovviamente qualora volessimo usare una property che non fa riferimento ad una tabella ma altresì a qualche altro elemento del database dovremmo cambiare il FROM e puntare sulla tabella di sistema più adatta ai nostri scopi.
SQL Server, OBJECTPROPERTY, tabelle, query, primary key, identity










