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;