Tablo adlarının aranması


102

Depolanan prosedürlerimde dizeleri aramak için aşağıdakileri kullanıyorum:

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

Yukarıdakileri, belirli bir db "DB adı" nda Tablo adlarını arayacak şekilde değiştirmek kolay mı?

Yanıtlar:



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

satıra yorum and is_ms_shipped = 0;yapmak pek bir işe yaramıyor gibi görünüyor
whytheq

2
Normalde gizlediği tek şey veritabanı diyagramı destek tablolarıdır veya yalnızca bir tane vardır. İşlevler / prosedürler ararken daha kullanışlıdır.
RichardTheKiwi

Neden şema adları eklemiyorsunuz? t.schema_id = s.schema_id'de t.schema_id = s.schema_id üzerinde s olarak DBNAME.sys.tables'dan t.schema_id, s.name, t.Name seçin, burada t.name '% yourtabletosearch%' ve is_ms_shipped = 0
Acroneos

11

Sunucu çapında tüm Veritabanlarındaki tüm tablolara bakmak ve çıktı almak istiyorsanız, belgelenmemiş sp_MSforeachdb prosedürünü kullanabilirsiniz:

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

3
Bir tablonun hangi veri tabanında olabileceğini bilmiyorsanız, bu cevap tek yararlıdır
Matthew

7

Veritabanı adını sadece çalıştırmak değil, parametre olarak geçirmek istediğinizi varsayıyorum:

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

Öyleyse, veritabanı adını sorguya eklemek için dinamik SQL kullanabilirsiniz:

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;

6

Ayrıca, içinde belirli bir dizeye sahip tabloları filtrelemek için Filtre düğmesini de kullanabilirsiniz. Aynısını saklı yordamlar ve görünümler için de yapabilirsiniz.

görüntü açıklamasını buraya girin


4

@ [RichardTheKiwi] 'nin cevabına ekleniyor.

Bir tablo listesini her aradığımda, genel olarak hepsinden seçim yapmak veya onları silmek istiyorum. Aşağıda bu komut dosyalarını sizin için oluşturan bir komut dosyası bulunmaktadır.

Oluşturulan seçme komut dosyası ayrıca bir tableName sütunu ekler, böylece hangi tabloya baktığınızı bilirsiniz:

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; 

3

Bunun eski bir ileti dizisi olduğunu biliyorum, ancak büyük / küçük harfe duyarlı aramayı tercih ediyorsanız:

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


2

Sahip olduğunuz her şema için basit bir çözüm göndermek istiyorum. MySQL DB kullanıyorsanız, şemanızdan tüm tablonun adını alabilir ve üzerine WHERE-LIKE koşulunu ekleyebilirsiniz. Bunu normal komut satırı ile aşağıdaki gibi de yapabilirsiniz:

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

Nerede tables_in_<your_shcema_name>bir sütunun adını döndürür SHOW TABLESkomuta.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.