Я знаю название стола, который хочу найти. Я использую Microsoft SQL Server Management Studio 2005 и хочу выполнить поиск во всех базах данных на сервере баз данных, к которому я подключен в студии. Это возможно? Мне нужно запрашивать системные таблицы?





Вы можете использовать sp_MSforeacheachdb.
sp_MSforeachdb 'ЕСЛИ СУЩЕСТВУЕТ (ВЫБРАТЬ * 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) НЕ ПУСТО, [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 ''?'''
То же, что и выше, но используйте системные функции, а не системные таблицы
EXEC sp_MSForEachDB 'USE [?] IF OBJECT_ID(''dbo.mytable'') IS NOT NULL PRINT ''?'''