121

I use the following to search for strings within the stored procedures of a specific database:

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

Is it easy to amend the above so that it searches Table names in a specific db "DBname" ?

whytheq
  • 34,466
  • 65
  • 172
  • 267
  • 1
    **See Also**: [How do I get list of all tables in a database using TSQL?](https://stackoverflow.com/q/175415/1366033) – KyleMit Jan 20 '22 at 17:23

11 Answers11

204

I'm using this and works fine

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
NeshaSerbia
  • 2,324
  • 2
  • 14
  • 13
92
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
  • 105,798
  • 26
  • 196
  • 262
  • commenting out the line `and is_ms_shipped = 0;` doesn't seem to do much – whytheq Oct 26 '12 at 12:42
  • 2
    The only thing it normally hides are the database diagram support tables, or is there only one. It's more useful when looking for functions/procedures. – RichardTheKiwi Oct 26 '12 at 13:23
  • Why not add schema names? select t.schema_id, s.name, t.Name from DBNAME.sys.tables as t inner join DBNAME.sys.schemas as s on t.schema_id = s.schema_id where t.name like '%yourtabletosearch%' and is_ms_shipped = 0 – Orsinus Dec 15 '16 at 07:27
15

If you want to look in all tables in all Databases server-wide and get output you can make use of the undocumented sp_MSforeachdb procedure:

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
Matthew
  • 1,630
  • 1
  • 14
  • 19
ransems
  • 641
  • 7
  • 19
12

You can also use the Filter button to filter tables with a certain string in it. You can do the same with stored procedures and views.

enter image description here

live-love
  • 48,840
  • 22
  • 240
  • 204
7

I am assuming you want to pass the database name as a parameter and not just run:

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

If so, you could use dynamic SQL to add the dbname to the query:

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
  • 68,045
  • 10
  • 83
  • 123
7

If you prefer case-insensitive searching:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME ILIKE '%%'

or

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
Tim Stack
  • 3,209
  • 3
  • 18
  • 39
3

Adding on to @[RichardTheKiwi]'s answer.

Whenever I search for a list of tables, in general I want to select from all of them or delete them. Below is a script that generates those scripts for you.

The generated select script also adds a tableName column so you know what table you're looking at:

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
  • 2,433
  • 1
  • 25
  • 33
2

you can also use the show command.

show tables like '%tableName%'
Naseeruddin V N
  • 597
  • 5
  • 17
2

I want to post a simple solution for every schema you've got. If you are using MySQL DB, you can simply get from your schema all the table's name and add the WHERE-LIKE condition on it. You also could do it with the usual command line as follows:

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

where tables_in_<your_shcema_name> returns the column's name of SHOW TABLES command.

2

You can use below :

Select * from sys.tables where name like '%yourtablename%'
Kaveh
  • 1,158
  • 6
  • 16
1

This will working fine....

SELECT * FROM sys.TABLES WHERE name LIKE '%%'

  • Welcome to Stackoverflow. This question is asked more than 10 years ago and it has an accepted answer. Please add some details about the reason you are adding a new answer. – MD Zand Nov 30 '22 at 13:09