web-dev-qa-db-ja.com

テーブル名の検索

ストアドプロシージャで文字列を検索するには、次を使用します。

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

特定のdb "DBname"のテーブル名を検索するように上記を修正するのは簡単ですか?

80
whytheq

私はこれを使用しており、正常に動作します

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
95
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

実行するだけでなく、データベース名をパラメーターとして渡したいと思っています。

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

その場合、動的SQLを使用してdbnameをクエリに追加できます。

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

サーバー全体のすべてのデータベースのすべてのテーブルを検索して出力を取得する場合は、ドキュメントに記載されていない sp_MSforeachdb プロシージャを使用できます。

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

@ [RichardTheKiwi]の答えに追加します。

一般に、テーブルのリストを検索するときはいつでも、すべてのテーブルから選択するか、テーブルを削除します。以下は、これらのスクリプトを生成するスクリプトです。

生成された選択スクリプトはtableName列も追加するので、どのテーブルを見ているかがわかります。

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

showコマンドを使用することもできます。

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

私はこれが古いスレッドであることを知っていますが、大文字と小文字を区別しない検索を好むなら:

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

[フィルタ]ボタンを使用して、特定の文字列を含むテーブルをフィルタリングすることもできます。ストアドプロシージャとビューでも同じことができます。

enter image description here

2
live-love

私はあなたが持っているすべてのスキーマの簡単なソリューションを投稿したいと思います。 MySQL DBを使用している場合は、スキーマからすべてのテーブル名を取得し、WHERE-LIKE条件を追加できます。また、次のように通常のコマンドラインで実行することもできます。

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

ここで、tables_in_<your_shcema_name>は、SHOW TABLESコマンドの列の名前を返します。

2
Marcello Marino