Bien qu'extrêmement puissant en tant que base de données relationnelle, SQL Server peut parfois être quelque peu intimidant lorsqu'il s'agit de rechercher des informations sous-jacentes sur le système de base de données lui-même.
Pour soulager ces maux de tête dans une petite partie, nous allons brièvement explorer comment trouver toutes les tables de la base de données qui contiennent un nom de colonne particulier .
Vues du catalogue SQL Server
Un concept de base à comprendre à propos de SQL Server est celui des catalog views
, qui sont en fait des tables de base de données (catalogs
dans ce cas) qui affichent des informations à l'échelle du système sur le moteur de base de données SQL Server.
Interrogation des informations système
Toutes les catalog views
sont accessibles via un SELECT
Instruction SQL FROM
un catalogue spécifique dans le sys.
espace de noms.
Par exemple, l'instruction suivante peut être utilisée pour afficher des informations sur toutes les tables de base de données du système via sys.tables
catalogue :
SELECT
*
FROM
sys.tables
Instruction LIKE et caractère générique
Avant d'entrer dans la façon d'extraire toutes les tables avec un nom particulier, nous devrions brièvement explorer ce que le LIKE
fait, ainsi que le caractère générique (%
) et comment ils sont utilisés ensemble.
LIKE
est utilisé dans une requête pour déterminer si un modèle particulier de caractères (généralement les valeurs d'une column
spécifiée ) correspondent à une chaîne de caractères formatée.
LIKE
est souvent également utilisé en conjonction avec le %
caractère, qui représente un caractère générique lors de la tentative de correspondance avec le modèle. Lorsqu'un %
caractère générique est présent dans la chaîne de modèle, il indique que tout caractères peuvent être présents à cet emplacement de la chaîne de modèle et être toujours considérés comme une correspondance.
Par exemple, si nous voulons trouver tous les livres où le title
commence avec "Le" mais peut contenir n'importe quel caractère par la suite, nous utiliserions une déclaration comme celle-ci :
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The%'
Les lecteurs attentifs pourraient se rendre compte que le modèle ci-dessus correspondrait non seulement aux titres qui avaient "Le" au début, mais également à tous les titres dont les mots commencent simplement par les trois lettres "Le". Depuis %
les caractères génériques correspondent à n'importe quel caractère, si nous ne voulons vérifier que les titres avec le mot "Le", ajouter un espace est plus approprié :
SELECT
title,
primary_author,
published_date
FROM
books
WHERE
title LIKE 'The %'
Sélectionner des tables contenant un nom de colonne
Avec nos connaissances de base des deux catalog views
et le LIKE
déclaration, nous sommes maintenant équipés pour rechercher toutes les tables de notre système qui contiennent un nom de colonne particulier :
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'
Nous devons combiner les informations de deux catalogues, sys.tables
et sys.columns
, nous utilisons donc un JOIN
déclaration. Les deux sont associés par le object_id
champ, donc nous JOIN
sur ce champ.
À partir de là, il suffit de sélectionner le ColumnName
et TableName
de nos résultats, et enfin, bien sûr, en ne recherchant que les enregistrements où sys.columns.name
est égal à notre ColumnName
chaîne.
Cependant, cette requête ne trouvera que des correspondances exactes du nom de la colonne. Si nous voulons trouver des correspondances partielles, nous pouvons utiliser LIKE
et %
caractères génériques à la place :
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%'
Nous l'avons! Une requête simple pour rechercher toutes les tables et les colonnes associées avec un nom de colonne particulier (ou similaire).