SQL Server utili query di metadati

Le query sui metadati sono davvero utili per la scoperta delle informazioni per un dato schema di database. Le informazioni del database incluse le tabelle, le viste, i nomi di colonne, i tipi di dati, gli indici e i vincoli di tabella sono tutti disponibili utilizzando query come queste.

Durante questo tutorial, voglio esplorare alcune utili query sui metadati.

Cominciamo trovando l'elenco di tabelle create nel database specificato.

seleziona * da information_schema.tables dove table_type = "tabella base";


Ora cerchiamo di elencare le viste create nel database specificato.

seleziona * da information_schema.tables dove table_type = "view";


Cerchiamo di creare una query che elenca i nomi delle colonne, i tipi di dati, se la colonna consente null o no, e i caratteri massimi consentiti nella riga.

select column_name, data_type, is_nullable, character_maximum_length from information_schema.columns where table_name = 'emp';


Questa query mostra il nome della tabella, l'ID oggetto, la data di creazione della tabella e l'ultima ora modificata della tabella.

selezionare nome, object_id, create_date, modify_date da sys.tables;


È spesso richiesto di elencare gli indici creati per una tabella con i nomi delle colonne. In questa query a.name è il nome della tabella per il quale si stanno elencando gli indici. Rimuovendo la condizione a.name, puoi vedere tutti gli indici creati nel tuo database.

SELECT a.name nome_tabella, b.nome nome_indice, d.nome nome_colonna FROM sys.tables a, sys.indexes b, sys.index_columns c, sys.columns d WHERE a.object_id = b.object_id AND b.object_id = c. object_id AND b.index_id = c.index_id AND c.object_id = d.object_id AND c.column_id = d.column_ID AND a.name = 'emp';

Questa query elencherà i vincoli definiti sulle tabelle con i nomi delle colonne. Nell'esempio, possiamo vedere i vincoli di chiave unica, primaria o esterna della tabella emp.

SELECT a.table_name, a.constraint_name, b.column_name, a.constraint_type FROM information_schema.table_constraints a, information_schema.key_column_usage b WHERE a.table_name = 'EMP' AND a.table_name = b.table_name AND a.table_schema = b.table_schema AND a.constraint_name = b.constraint_name;

Supponiamo di voler scrivere a 'seleziona count (1) da table_name' query per ogni tabella nel tuo database, ma hai più di 100 tabelle nel tuo database. Invece di scrivere una query separata per ogni tabella, è possibile generare quelle query utilizzando SQL. Pertanto, è possibile scrivere codice SQL per generare SQL.

SELEZIONA 'seleziona count (1) da [' + table_name + '];' FROM information_schema.tables;