我有一个带有数百个数据库的SQL Server,每个数据库都有数百个表。现在,我想在这些数据库中找到我要查找的表。
我可以使用以下方法查找单个数据库中是否存在表
use myDatabase select * from sys.tables where name = 'mytable' GO
但是使用这意味着我必须手动更改数据库数百次。我只想查找数据库名称。有出路吗 ?
好的,如果您只是想查找包含特定表的每个数据库,并且不打算查询该表,则可以执行以下操作:
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 ,否则我将使用它来避免在错误的架构中查找表)
OBJECT_ID