Pergunta

I exportados uma tabela para um servidor, mas não consigo encontrar a mesa. Talvez eu não colocar o banco de dados destino certo. Como posso encontrar esta tabela se o meu servidor tem várias bases de dados, sem abrir cada um deles?

Eu uso o MS SQL Server Management Studio 2008.

Foi útil?

Solução

áspero e sujo, mas seria fazer o trabalho.

-- 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'

Outras dicas

Uma maneira

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'

Ou se você estiver razoavelmente confiante de que seria no esquema dbo em qualquer banco de dados

SELECT name
FROM   sys.databases
WHERE  CASE
         WHEN state_desc = 'ONLINE' 
              THEN OBJECT_ID(QUOTENAME(name) + '.[dbo].[table_name]', 'U')
       END IS NOT NULL 

Baseado fora a resposta de Martin Smith acima, mas generalizada em vista a dar uma espécie de versão do sys.tables cross-DB -

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)

Agora, se só eu posso trabalhar para fora uma maneira de fazer o mesmo para colunas .......

EDIT - Ignorar isso, encontrando às vezes perde tabelas completamente.

Minor esclarecimentos apenas para evitar dores de cabeça para aqueles com 'superusuários' que não sabem como nomear bancos de dados:

EXEC sp_MSForEachDB '
USE [?]
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
PRINT ''Found here: ?'''
select 'select * from '+name+'.sys.tables where name=
        ''[yourtable]'';' from sys.databases

Em vez de [YourTable], digite o nome da tabela em falta, e execute novamente o resultado.

EXEC sp_MSForEachDB '
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
    PRINT ''?''
'
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top