【发布时间】:2008-10-03 13:03:00
【问题描述】:
我知道我要查找的表的名称。我正在使用 Microsoft SQL Server Management Studio 2005,我想搜索我在工作室中连接的数据库服务器中的所有数据库。这可能吗?需要查询系统表吗?
【问题讨论】:
标签: sql-server database sql-server-2005
我知道我要查找的表的名称。我正在使用 Microsoft SQL Server Management Studio 2005,我想搜索我在工作室中连接的数据库服务器中的所有数据库。这可能吗?需要查询系统表吗?
【问题讨论】:
标签: sql-server database sql-server-2005
如上,但使用系统函数而不是系统表
EXEC sp_MSForEachDB 'USE [?] IF OBJECT_ID(''dbo.mytable'') IS NOT NULL PRINT ''?'''
【讨论】:
您可以使用 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 = ''
设置不计数
创建表 [#tblDatabaseName] ( [DbName] [varchar] (128) NOT NULL , [TableName] [varchar] (128) NOT 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 是一个未记录的过程,可以为您执行此操作。输出输出有点困难,所以我把它留给你。
EXEC sp_MSForEachDB 'USE [?] IF EXISTS(SELECT * FROM Sys.Objects WHERE Type = ''U'' AND Name = ''Product'') PRINT ''?'''
【讨论】: