我有一个拥有数百个数据库的SQL Server,每个数据库都有数百个表.现在我想在这些数据库中找到我正在寻找的表格.
我可以找到一个表是否存在于个人数据库中使用
use myDatabase
select * from sys.tables where name = 'mytable'
GO
Run Code Online (Sandbox Code Playgroud)
但使用这意味着我必须手动更改数据库数百次.我想只找到数据库名称.有出路吗 ?
Dam*_*ver 16
好的,如果你只是想找到包含特定表的每个数据库,并且不打算查询表,那么你可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
(如果您没有在数据库中使用多个模式,则不需要在OBJECT_ID调用中指定dbo ,否则我会使用它来避免在错误的模式中查找表)
Joh*_*som 14
这应该做你想要的:
EXEC sp_MSforeachdb "use [?];select * from sys.tables where name='TableName' "
Run Code Online (Sandbox Code Playgroud)
要在输出中包含当前数据库的名称,请使用:
EXEC sp_MSforeachdb "use [?];select '[?]' as DatabaseName, * from sys.tables where name='TableName' "
Run Code Online (Sandbox Code Playgroud)
SELECT DISTINCT DB_NAME(database_id)
FROM [sys].[dm_db_index_operational_stats](NULL,NULL,NULL,NULL)
WHERE OBJECT_NAME(object_id,database_id) = 'mytable'
Run Code Online (Sandbox Code Playgroud)