Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come trovare tabelle che contengono una colonna specifica in SQL Server

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).