web-dev-qa-db-fra.com

Recherche de noms de table

J'utilise les éléments suivants 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 afin de rechercher les noms de table dans une base de données spécifique "DBname"?

81
whytheq

J'utilise ceci et fonctionne bien

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
98
NeshaSerbia
select name
  from DBname.sys.tables
 where name like '%xxx%'
   and is_ms_shipped = 0; -- << comment out if you really want to see them
85
RichardTheKiwi

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 à 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;
7
GarethD

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

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
6
ransems

Ajoutant à la réponse de @ [RichardTheKiwi].

Chaque fois que je recherche une liste de tables, en général, je veux les sélectionner 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 nomTable afin que vous sachiez de quelle table vous consultez:

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; 
4
Rafi

vous pouvez également utiliser la commande show.

show tables like '%tableName%'
3
Naseeruddin V N

Je sais que c'est un vieux fil, mais si vous préférez effectuer une recherche sans distinction de casse:

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

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

enter image description here

2
live-love

Je veux poster une solution simple pour chaque schéma que vous avez. Si vous utilisez MySQL DB, vous pouvez simplement extraire 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 colonne de la commande SHOW TABLES.

2
Marcello Marino