在Microsoft SQL Server Management Studio 2005中,如何找到表所在的数据库,以及该数据库的名称(例如dbo.mytable1)?
时间:2020-03-06 15:04:24 来源:igfitidea点击:
我知道我要查找的表的名称。我正在使用Microsoft SQL Server Management Studio 2005,并且想搜索连接到Studio的数据库服务器中的所有数据库。这可能吗?我需要查询系统表吗?
解决方案
我们可以使用sp_MSforeacheachdb。
sp_MSforeachdb'IF EXISTS(SELECT * FROM sys.tables WHERE [Name] =TableName'')PRINT
?''';
使用主人
宣告@db_name varchar(128)
宣告@DbID int
宣告@sql_string nvarchar(4000)
声明@TableName varchar(30)
选择@TableName =''
设置为nocount
创建表[#tblDatabaseName](
[DbName] varcharNOT NULL,
[TableName] varcharNOT NULL)
声明db_cursor游标forward_only为
SELECT name, DbID FROM master..sysdatabases WHERE name NOT IN ('northwind', 'pubs') AND (status & 32) <> 32 --loading. AND (status & 64) <> 64 --pre recovery. AND (status & 128) <> 128 --recovering. AND (status & 256) <> 256 --not recovered. AND (status & 512) <> 512 --Offline AND (status & 32768) <> 32768 --emergency mode. AND DbID > 4
打开db_cursor
接下来从db_cursor提取到@db_name,@DbID
而@@ FETCH_STATUS = 0
开始
set @sql_string = '' +' Insert into #tblDatabaseName ' +' select ''' + @db_name + ''' as ''DbName'', ' +' o.name as ''TableName'' ' +' from [' + @db_name + ']..sysobjects o with(nolock) ' +' where o.name like ''' + @TableName + ''' ' execute sp_executesql @sql_string fetch next from db_cursor into @db_name, @DbID
结尾
取消分配db_cursor
从#tblDatabaseName中选择*
删除表#tblDatabaseName
sp_MSForEachDB是一个未记录的proc,可以为我们完成此操作。输出输出要困难一些,因此我将留给我们。
EXEC sp_MSForEachDB 'USE [?] IF EXISTS(SELECT * FROM Sys.Objects WHERE Type = ''U'' AND Name = ''Product'') PRINT ''?'''
如上,但使用系统功能而不是系统表
EXEC sp_MSForEachDB 'USE [?] IF OBJECT_ID(''dbo.mytable'') IS NOT NULL PRINT ''?'''