我知道要查找的表的名称。我正在使用Microsoft SQL Server Management Studio 2005,我想搜索我在工作室中附加的数据库服务器中的所有数据库。这可能吗?我是否需要查询系统表?
答案 0 :(得分:3)
您可以使用sp_MSforeacheachdb。
sp_MSforeachdb'IF EXISTS(SELECT * FROM sys.tables WHERE [Name] =''TableName'')PRINT''?''';
答案 1 :(得分:3)
如上所述但使用系统功能而非系统表
EXEC sp_MSForEachDB 'USE [?] IF OBJECT_ID(''dbo.mytable'') IS NOT NULL PRINT ''?'''
答案 2 :(得分:1)
使用主
DECLARE @db_name varchar(128) DECLARE @DbID int DECLARE @sql_string nvarchar(4000) DECLARE @TableName varchar(30)
选择@TableName =''
在
上设置nocountCREATE TABLE [#tllDatabaseName]( [DbName] [varchar](128)NOT NULL, [TableName] [varchar](128)NOT NULL)
为
声明db_cursor游标forward_onlySELECT 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
中选择*drop table #tblDatabaseName
答案 3 :(得分:1)
sp_MSForEachDB是一个未记录的proc,可以为您执行此操作。获得输出有点困难,所以我会留给你。
EXEC sp_MSForEachDB 'USE [?] IF EXISTS(SELECT * FROM Sys.Objects WHERE Type = ''U'' AND Name = ''Product'') PRINT ''?'''