【问题标题】:SQL statement to find a table by its name通过名称查找表的 SQL 语句
【发布时间】:2014-06-02 02:35:20
【问题描述】:

我们有很多数据库和这些数据库中的很多表。我正在寻找一个特定的。我知道表的名称,但手动搜索每个数据库并不容易。我可以使用什么 SQL 语句按名称查找表?

顺便说一句,我们使用的是 Microsoft SQL Server Management Studio。也许还有另一种方法可以在这个程序中按名称搜索表?

【问题讨论】:

  • 我做到了。我试过select * from sys.tables where name like '%database%',但它似乎对我不起作用。
  • @navig8tr SO 社区最近变得相当敏感。下次先发布一些带有您的问题的代码。我看到你至少在上面的评论中做了
  • 您的查询可能不起作用的原因是您可能在错误的数据库中查找。你也想搜索像'%tablename%'这样的名字
  • 如前所述,我尝试了select * from sys.tables where name like '%tablename%'(尽管我在之前的评论中输入错误)。我不介意对每个 dB 都这样做,但它似乎没有给出预期的结果。事实上,即使我搜索我知道在数据库中的表,它也不会返回任何结果。我一定做错了什么,但我不确定是什么。谢谢大家的建议

标签: sql sql-server database find tablename


【解决方案1】:

您说您进行了搜索,应该会看到这篇文章:

http://blog.sqlauthority.com/2008/04/29/sql-server-find-table-in-every-database-of-sql-server/

如果没有,请遵循。基本上他创建的是一个存储过程,它将搜索您在每个数据库中指定的每个表名。

如果你这样做:

select * from sys.tables where name like '%tablename%'

您每次都需要更改数据库,如果您有很多,那么您就会发现问题。

【讨论】:

  • 虽然我之前确实尝试过这种说法,但我没有正确地做到这一点。我试图同时查询所有数据库,但是使用此语句一次只能搜索一个 dB。在 Microsoft SQL Server Mgmt Studio 中,我只需右键单击要搜索的 dB,然后在查询窗口中使用该语句。
  • 此外,该链接确实提供了一种同时搜索多个 dB 的方法。但是,我只是手动查询了每个大约 10 dB。
【解决方案2】:

试试这个:

Select name from DBname.sys.tables where name like '%info'

【讨论】:

    【解决方案3】:

    我想我会用我现在使用的解决方案进行更新,以在许多 dB 中找到一个表。经过一番搜索,我发现了这个查询:

    /*Finds a table across multiple dBs and returns the dB(s) in which the table was found*/
    SELECT  DISTINCT DB_NAME(database_id) 
    FROM [sys].[dm_db_index_operational_stats](NULL,NULL,NULL,NULL)
    WHERE OBJECT_NAME(object_id,database_id) = 'table name'
    

    此查询查找保存该表的 dB。然后,在 Microsoft SQL Server Mgmt Studio 中,我转到对象资源管理器窗口,找到查询标识的 dB,展开其内容,然后单击表文件夹。然后我使用过滤器工具按名称查找表。如果过滤器工具在 Databases 文件夹上工作但它没有工作,那就太好了。过滤前必须选择 Tables 文件夹。

    这可能不是最好的解决方案,但它对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      相关资源
      最近更新 更多