Recherche de noms de tables

99

J'utilise ce qui suit pour rechercher des chaînes dans mes procédures stockées:

use DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'

Est-il facile de modifier ce qui précède pour qu'il recherche les noms de table dans une base de données spécifique "DBname"?

pourquoi leq
la source

Réponses:

142

J'utilise ceci et fonctionne bien

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
NeshaSerbie
la source
3
Comprend aussi des vues :-)
François Breton
87
select name
  from DBname.sys.tables
 where name like '%xxx%'
   and is_ms_shipped = 0; -- << comment out if you really want to see them
RichardTheKiwi
la source
commenter la ligne and is_ms_shipped = 0;ne semble pas faire grand-chose
whytheq
2
La seule chose qu'il cache normalement sont les tables de support des diagrammes de base de données, ou y en a-t-il une seule. C'est plus utile lors de la recherche de fonctions / procédures.
RichardTheKiwi
Pourquoi ne pas ajouter des noms de schéma? sélectionnez t.schema_id, s.name, t.Name de DBNAME.sys.tables comme jointure interne DBNAME.sys.schemas comme s sur t.schema_id = s.schema_id où t.name comme '% yourtabletosearch%' et is_ms_shipped = 0
Acroneos
10

Si vous souhaitez consulter toutes les tables de toutes les bases de données à l'échelle du serveur et obtenir une sortie, vous pouvez utiliser la procédure sp_MSforeachdb non documentée :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
ransems
la source
3
Cette réponse est la seule utile si vous ne savez pas dans quelle base de données une table peut se trouver
Matthieu
7

Je suppose que vous voulez passer le nom de la base de données en tant que paramètre et pas simplement exécuter:

SELECT  *
FROM    DBName.sys.tables
WHERE   Name LIKE '%XXX%'

Si tel est le cas, vous pouvez utiliser le SQL dynamique pour ajouter le nom de base de données à la requête:

DECLARE @DBName NVARCHAR(200) = 'YourDBName',
        @TableName NVARCHAR(200) = 'SomeString';

IF NOT EXISTS (SELECT 1 FROM master.sys.databases WHERE Name = @DBName)
    BEGIN
        PRINT 'DATABASE NOT FOUND';
        RETURN;
    END;

DECLARE @SQL NVARCHAR(MAX) = '  SELECT  Name
                                FROM    ' + QUOTENAME(@DBName) + '.sys.tables
                                WHERE   Name LIKE ''%'' + @Table + ''%''';

EXECUTE SP_EXECUTESQL @SQL, N'@Table NVARCHAR(200)', @TableName;
GarethD
la source
5

Vous pouvez également utiliser le bouton Filtrer pour filtrer les tables contenant une certaine chaîne. Vous pouvez faire de même avec les procédures stockées et les vues.

entrez la description de l'image ici

l'amour en direct
la source
4

Ajout de la réponse de @ [RichardTheKiwi].

Chaque fois que je recherche une liste de tables, je souhaite en général les sélectionner toutes ou les supprimer. Vous trouverez ci-dessous un script qui génère ces scripts pour vous.

Le script de sélection généré ajoute également une colonne tableName afin que vous sachiez quelle table vous regardez:

select 'select ''' + name + ''' as TableName, * from ' + name as SelectTable,
'delete from ' + name as DeleteTable
from sys.tables
where name like '%xxxx%'
and is_ms_shipped = 0; 
Rafi
la source
3

vous pouvez également utiliser la commande show.

show tables like '%tableName%'
Naseeruddin VN
la source
6
Ceci est la syntaxe MySQL sur une question taguée sql-server
Mike Guthrie
3

Je sais que c'est un vieux fil, mais si vous préférez la recherche insensible à la casse:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
Tim Stack
la source
2

Je souhaite publier une solution simple pour chaque schéma que vous avez. Si vous utilisez MySQL DB, vous pouvez simplement obtenir à partir de votre schéma tout le nom de la table et y ajouter la condition WHERE-LIKE. Vous pouvez également le faire avec la ligne de commande habituelle comme suit:

SHOW TABLES WHERE tables_in_<your_shcema_name> LIKE '%<table_partial_name>%';

tables_in_<your_shcema_name>renvoie le nom de la SHOW TABLEScommande de la colonne .

Marcello Marino
la source