显示包含特定表的所有数据库名称

新手上路,请多包涵

我的 SQL Server 中有许多数据库。

我只需要搜索包含特定表名的数据库名称 Heartbitmaster

我有很多数据库,例如 GotgoldDVD 等,我只想从包含此表的查询中查找数据库名称 Heartbitmaster

我搜索了我尝试查询:

 SELECT
    TABLE_NAME
FROM
    INFORMATION_SCHEMA.TABLES
WHERE
    TABLE_TYPE = 'base table'
    AND table_schema = 'Heartbitmaster'

但它没有用。

我进一步搜索并发现:

 SELECT name, database_id, create_date
FROM sys.databases

但不知道如何进一步安排搜索表名的条件

请帮我。

原文由 C Sharper 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 435
2 个回答

我通过以下查询完成了它:

 SELECT name
FROM sys.databases
WHERE  CASE WHEN state_desc = 'ONLINE'
         THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[heartbit]', 'U')
       END IS NOT NULL

原文由 C Sharper 发布,翻译遵循 CC BY-SA 4.0 许可协议

我完成 sp_MSforeachdb 并创建如下过程:

 create PROCEDURE findTableName
@tablename nvarchar(max)
AS
BEGIN
    declare @sqlCommand nvarchar(max)
    CREATE TABLE #t (DBName VARCHAR(256),SchemaName VARCHAR(256),TableName VARCHAR(256))
    set @sqlCommand='insert into #t (DBName,SchemaName,TableName) exec sp_MSforeachdb ''SELECT "?" AS DB, SCHEMA_NAME(schema_id) AS SchemaName ,name FROM [?].sys.tables WHERE name like ''''%'+@tablename+'%'''''''
    --print @sqlCommand
    exec ( @sqlCommand)
    select * from #t
END

原文由 Hossein Anbari 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进