Sebbene sia estremamente potente come database relazionale, SQL Server può essere alquanto scoraggiante a volte quando si tratta di cercare informazioni sottostanti sul sistema di database stesso.
Per alleviare questi mal di testa in una piccola parte, esploreremo brevemente come trovare tutte le tabelle nel database che contengono un nome di colonna particolare .
Viste del catalogo di SQL Server
Un concetto di base da comprendere su SQL Server è quello di catalog views
, che sono effettivamente tabelle di database (catalogs
in questo caso) che visualizzano informazioni a livello di sistema su Motore di database di SQL ServerSQL Server.
Interrogazione delle informazioni di sistema
Tutte le catalog views
si accede tramite un SELECT
Istruzione SQL FROM
un catalogo specifico all'interno di sys.
spazio dei nomi.
Ad esempio, la seguente istruzione può essere utilizzata per visualizzare informazioni su tutte le tabelle di database nel sistema tramite sys.tables
catalogo:
SELECT
*
FROM
sys.tables
Dichiarazione LIKE e carattere jolly
Prima di entrare nel modo in cui estrarre tutte le tabelle con un nome particolare, dovremmo esplorare brevemente cosa è il LIKE
l'istruzione lo fa, così come il carattere jolly (%
) e come vengono utilizzati insieme.
LIKE
viene utilizzato in una query per determinare se un particolare modello di caratteri (in genere i valori di una column
specificata ) corrispondono a una stringa formattata di caratteri.
LIKE
viene spesso utilizzato anche insieme a %
carattere, che rappresenta un carattere jolly quando si tenta di abbinare il modello. Quando un %
il carattere jolly è presente nella stringa del modello, indica che qualsiasi i caratteri possono essere presenti in quella posizione della stringa del modello ed essere comunque considerati una corrispondenza.
Ad esempio, se vogliamo trovare tutti i libri in cui il title
inizia con "The" ma può contenere qualsiasi carattere in seguito, useremmo un'istruzione come questa:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The%'
I lettori attenti potrebbero rendersi conto che lo schema sopra non corrisponderebbe solo ai titoli che avevano "The" all'inizio, ma anche a qualsiasi titolo con parole che iniziano semplicemente con le tre lettere "The". Dal %
i caratteri jolly corrispondono a qualsiasi carattere, se vogliamo solo controllare i titoli con la parola "The", aggiungere uno spazio è più appropriato:
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
Selezione di tabelle contenenti un nome di colonna
Con la nostra conoscenza di base di entrambe le catalog views
e il LIKE
istruzione, siamo ora attrezzati per cercare tutte le tabelle nel nostro sistema che contengono un nome di colonna particolare:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name = 'ColumnName'
Dobbiamo combinare le informazioni da due cataloghi, sys.tables
e sys.columns
, quindi stiamo usando un JOIN
dichiarazione. I due sono associati da object_id
campo, quindi JOIN
su quel campo.
Da lì, è sufficiente selezionare il ColumnName
e TableName
dei nostri risultati e, infine, ovviamente, solo la ricerca di record in cui sys.columns.name
è uguale al nostro ColumnName
stringa.
Tuttavia, questa query troverà solo corrispondenze esatte del nome della colonna. Se vogliamo trovare corrispondenze parziali, possiamo usare LIKE
e %
caratteri jolly invece:
SELECT
sys.columns.name AS ColumnName,
tables.name AS TableName
FROM
sys.columns
JOIN sys.tables ON
sys.columns.object_id = tables.object_id
WHERE
sys.columns.name LIKE '%ColumnName%'
Eccolo qua! Una semplice query per cercare tutte le tabelle e le colonne associate con un nome di colonna particolare (o simile).