Найти таблицу в нескольких базах данных SQL SERVER 2005 - PullRequest
9 голосов
/ 04 марта 2009

Я экспортировал таблицу на сервер, но не могу найти таблицу. Возможно я не поставил правильную базу данных назначения. Как я могу найти эту таблицу, если на моем сервере есть несколько баз данных, не открывая каждую из них?

Я использую MS Sql Server Management Studio 2008.

Ответы [ 6 ]

13 голосов
/ 04 марта 2009

Грубый и грязный, но это сделало бы работу.

-- Instructions. Replace "table_name_here" with actual table name
sp_MSforeachdb 'USE ?
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N''[table_name_here]'') AND OBJECTPROPERTY(id, N''IsUserTable'') = 1)
BEGIN
  PRINT ''Found in db ?''
END'
5 голосов
/ 20 марта 2011

В одну сторону

SELECT  DISTINCT DB_NAME(database_id) 
FROM [sys].[dm_db_index_operational_stats](NULL,NULL,NULL,NULL)
WHERE OBJECT_NAME(object_id,database_id) = 'table_name'

Или, если вы достаточно уверены, что это будет в схеме dbo в любой базе данных

SELECT name
FROM   sys.databases
WHERE  CASE
         WHEN state_desc = 'ONLINE' 
              THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[table_name]', 'U')
       END IS NOT NULL 
3 голосов
/ 13 июня 2013

Основано на ответе Мартина Смита, приведенном выше, но обобщено для представления своего рода кросс-DB-версии sys.tables -

CREATE VIEW ListTablesAllDBs

AS

SELECT 
    DB_NAME(database_id) as DBName,
    OBJECT_SCHEMA_NAME(object_id,database_id) as SchemaName,
    OBJECT_NAME(object_id,database_id) as TableName
FROM
    [sys].[dm_db_index_operational_stats](NULL,NULL,NULL,NULL)

Теперь, если только я смогу найти способ сделать то же самое для столбцов .......

РЕДАКТИРОВАТЬ - игнорировать это, обнаруживая, что иногда пропускает таблицы вообще.

2 голосов
/ 17 марта 2011

Незначительные разъяснения, чтобы избежать головной боли для тех, у кого есть SuperUsers, которые не знают, как называть БД:

EXEC sp_MSForEachDB '
USE [?]
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
PRINT ''Found here: ?'''
1 голос
/ 04 марта 2009
EXEC sp_MSForEachDB '
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
    PRINT ''?''
'
1 голос
/ 04 марта 2009
select 'select * from '+name+'.sys.tables where name=
        ''[yourtable]'';' from sys.databases

Вместо [yourtable] введите имя отсутствующей таблицы и снова запустите результат.

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