Pencarian nama tabel

99

Saya menggunakan yang berikut ini untuk mencari string dalam prosedur tersimpan saya:

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

Apakah mudah untuk mengubah hal di atas sehingga mencari nama Tabel dalam "DBname" db tertentu?

whytheq
sumber

Jawaban:

142

Saya menggunakan ini dan berfungsi dengan baik

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
NeshaSerbia
sumber
3
Termasuk pemandangan juga :-)
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
sumber
mengomentari baris and is_ms_shipped = 0;tampaknya tidak berbuat banyak
whytheq
2
Satu-satunya hal yang biasanya disembunyikan adalah tabel dukungan diagram database, atau hanya ada satu. Ini lebih berguna saat mencari fungsi / prosedur.
RichardTheKiwi
Mengapa tidak menambahkan nama skema? pilih t.schema_id, s.name, t.Name dari DBNAME.sys.tables sebagai t inner join DBNAME.sys.schemas as s di t.schema_id = s.schema_id dimana t.name seperti '% yourtabletosearch%' dan is_ms_shipped = 0
Acroneos
10

Jika Anda ingin melihat di semua tabel di semua Database di seluruh server dan mendapatkan output, Anda dapat menggunakan prosedur sp_MSforeachdb yang tidak terdokumentasi :

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
tebusan
sumber
3
Jawaban ini adalah satu-satunya jawaban yang berguna jika Anda tidak tahu database tabel mana yang mungkin ada
Matius
7

Saya berasumsi Anda ingin meneruskan nama database sebagai parameter dan tidak hanya menjalankan:

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

Jika demikian, Anda dapat menggunakan SQL dinamis untuk menambahkan dbname ke kueri:

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
sumber
5

Anda juga dapat menggunakan tombol Filter untuk memfilter tabel dengan string tertentu di dalamnya. Anda bisa melakukan hal yang sama dengan prosedur dan tampilan tersimpan.

masukkan deskripsi gambar di sini

cinta hidup
sumber
4

Menambah jawaban @ [RichardTheKiwi].

Setiap kali saya mencari daftar tabel, secara umum saya ingin memilih dari semuanya atau menghapusnya. Di bawah ini adalah skrip yang menghasilkan skrip tersebut untuk Anda.

Skrip pemilihan yang dihasilkan juga menambahkan kolom tableName sehingga Anda tahu tabel yang Anda lihat:

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
sumber
3

Anda juga dapat menggunakan perintah show.

show tables like '%tableName%'
Naseeruddin VN
sumber
6
Ini adalah sintaks MySQL pada pertanyaan yang diberi tag sql-server
Mike Guthrie
3

Saya tahu ini adalah utas lama, tetapi jika Anda lebih suka pencarian case-sensitive:

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

Saya ingin memposting solusi sederhana untuk setiap skema yang Anda miliki. Jika Anda menggunakan MySQL DB, Anda bisa mendapatkan semua nama tabel dari skema Anda dan menambahkan kondisi WHERE-LIKE. Anda juga bisa melakukannya dengan baris perintah biasa seperti berikut:

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

dimana tables_in_<your_shcema_name>mengembalikan nama kolom dari SHOW TABLESperintah.

Marcello Marino
sumber