在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 ''?'''