114

我使用以下内容在特定数据库的存储过程中搜索字符串:

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

修改上面的内容是否容易,以便在特定的 db "DBname" 中搜索表名?

4

9 回答 9

181

我正在使用它并且工作正常

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE TABLE_NAME LIKE '%%'
于 2014-03-03T14:03:38.837 回答
90
select name
  from DBname.sys.tables
 where name like '%xxx%'
   and is_ms_shipped = 0; -- << comment out if you really want to see them
于 2012-10-26T11:03:56.190 回答
13

如果您想查看所有数据库服务器范围内的所有表并获取输出,您可以使用未记录的sp_MSforeachdb过程:

sp_MSforeachdb 'SELECT "?" AS DB, * FROM [?].sys.tables WHERE name like ''%Table_Names%'''
于 2017-12-30T18:06:57.513 回答
9

您还可以使用过滤器按钮来过滤包含特定字符串的表。您可以对存储过程和视图执行相同操作。

在此处输入图像描述

于 2019-03-21T17:04:10.240 回答
7

我假设您想将数据库名称作为参数传递,而不仅仅是运行:

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;
于 2012-10-26T11:07:21.147 回答
5

我知道这是一个旧线程,但如果您更喜欢不区分大小写的搜索:

SELECT * FROM INFORMATION_SCHEMA.TABLES 
WHERE Lower(TABLE_NAME) LIKE Lower('%%')
于 2018-11-29T11:25:53.517 回答
3

添加到@[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; 
于 2016-03-29T09:07:58.143 回答
2

我想为您拥有的每个架构发布一个简单的解决方案。如果您使用的是 MySQL DB,您可以简单地从您的模式中获取所有表的名称并在其上添加 WHERE-LIKE 条件。您也可以使用通常的命令行来执行此操作,如下所示:

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

wheretables_in_<your_shcema_name>返回列的SHOW TABLES命令名称。

于 2019-02-11T11:43:54.737 回答
2

您也可以使用 show 命令。

show tables like '%tableName%'
于 2017-02-08T13:22:12.977 回答