ストアドプロシージャで文字列を検索するには、次を使用します。
use DBname
SELECT Name
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%xxx%'
特定のdb "DBname"のテーブル名を検索するように上記を修正するのは簡単ですか?
私はこれを使用しており、正常に動作します
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '%%'
select name
from DBname.sys.tables
where name like '%xxx%'
and is_ms_shipped = 0; -- << comment out if you really want to see them
実行するだけでなく、データベース名をパラメーターとして渡したいと思っています。
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;
サーバー全体のすべてのデータベースのすべてのテーブルを検索して出力を取得する場合は、ドキュメントに記載されていない sp_MSforeachdb プロシージャを使用できます。
sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
@ [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;
showコマンドを使用することもできます。
show tables like '%tableName%'
私はこれが古いスレッドであることを知っていますが、大文字と小文字を区別しない検索を好むなら:
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
私はあなたが持っているすべてのスキーマの簡単なソリューションを投稿したいと思います。 MySQL DBを使用している場合は、スキーマからすべてのテーブル名を取得し、WHERE-LIKE条件を追加できます。また、次のように通常のコマンドラインで実行することもできます。
SHOW TABLES WHERE tables_in_<your_shcema_name> LIKE '%<table_partial_name>%';
ここで、tables_in_<your_shcema_name>
は、SHOW TABLES
コマンドの列の名前を返します。