搜索表名


97

我使用以下内容在存储过程中搜索字符串:

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

修改上述内容是否容易,以便在特定的数据库“ DBname”中搜索表名称?

Answers:



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

注释掉该行and is_ms_shipped = 0;似乎并没有做什么用
为什么

2
它通常隐藏的唯一内容是数据库图支持表,或者只有一个。查找功能/过程时,此功能更为有用。
RichardTheKiwi 2012年

为什么不添加架构名称?在t.schema_id = s.schema_id上,从DBNAME.sys.tables中选择t.schema_id,s.name,t.Name作为t内部联接DBNAME.sys.schemas,其中t.name如'%yourtabletosearch%'和is_ms_shipped = 0
Acroneos '16

10

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

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

3
如果您不知道表可能在哪个数据库中,则此答案是唯一有用的答案
Matthew

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;

5

您也可以使用“过滤器”按钮过滤表中带有特定字符串的表。您可以对存储过程和视图执行相同的操作。

在此处输入图片说明


4

加上@ [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; 


3

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

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

2

我想为您拥有的每个架构发布一个简单的解决方案。如果您使用的是MySQL DB,则只需从架构中获取所有表的名称,并在其上添加WHERE-LIKE条件。您也可以按照以下常规命令行进行操作:

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

其中,tables_in_<your_shcema_name>返回列的SHOW TABLES命令名称。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.