Как определить, в какой базе данных находится таблица, из которой вы знаете ее имя (например, dbo.mytable1) в Microsoft SQL Server Management Studio 2005? - PullRequest
1 голос
/ 03 октября 2008

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

Ответы [ 4 ]

3 голосов
/ 14 октября 2008

Как указано выше, но использовать системные функции, а не системные таблицы

EXEC sp_MSForEachDB 'USE [?] IF OBJECT_ID(''dbo.mytable'') IS NOT NULL PRINT ''?'''
3 голосов
/ 03 октября 2008

Вы можете использовать sp_MSforeacheachdb.

sp_MSforeachdb 'ЕСЛИ СУЩЕСТВУЕТ (ВЫБРАТЬ * ИЗ sys.tables WHERE [Name] =' 'TableName' ') PRINT' '?' '';

1 голос
/ 03 октября 2008

sp_MSForEachDB - недокументированный процесс, который может сделать это для вас. Получить вывод немного сложнее, поэтому я оставлю это для вас.

EXEC sp_MSForEachDB 'USE [?] IF EXISTS(SELECT * FROM Sys.Objects WHERE Type = ''U'' AND Name = ''Product'') PRINT ''?'''
1 голос
/ 03 октября 2008

использовать мастер

ОБЪЯВИТЬ @db_name varchar (128) ОБЪЯВИТЬ @DbID int ОБЪЯВИТЬ @sql_string nvarchar (4000) ОБЪЯВИТЬ @TableName varchar (30)

Выберите @TableName = ''

установить nocount на

CREATE TABLE [#tblDatabaseName] ( [DbName] [varchar] (128) НЕ 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

open db_cursor

получить следующий из db_cursor в @db_name, @ DbID

while @@ 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

select * from # tblDatabaseName

удалить таблицу # tblDatabaseName

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...