一尘不染

查找具有特定表的数据库,或者在SQL Server的每个数据库中查找表

sql

我有一个带有数百个数据库的SQL Server,每个数据库都有数百个表。现在,我想在这些数据库中找到我要查找的表。

我可以使用以下方法查找单个数据库中是否存在表

use myDatabase 
select * from sys.tables  where name = 'mytable' 
GO

但是使用这意味着我必须手动更改数据库数百次。我只想查找数据库名称。有出路吗 ?


阅读 148

收藏
2021-03-17

共1个答案

一尘不染

好的,如果您只是想查找包含特定表的每个数据库,并且不打算查询该表,则可以执行以下操作:

create table #t (
    DBName sysname not null
)
go
exec sp_MSforeachdb 'use [?]; if OBJECT_ID(''dbo.mytable'') is not null insert into #t (DBName) select ''?'''
go
select * from #t
go
drop table #t

(如果您不在数据库中使用多个架构,则无需在OBJECT_ID调用中指定dbo ,否则我将使用它来避免在错误的架构中查找表)

2021-03-17