Domanda

Ho esportato una tabella su un server ma non riesco a trovare la tabella. Forse non ho messo il giusto database di destinazione. Come posso trovare questa tabella se il mio server ha più database, senza aprirli tutti?

Uso MS Sql Server Management Studio 2008.

È stato utile?

Soluzione

Ruvido e sporco, ma farebbe il lavoro.

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

Altri suggerimenti

Solo andata

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'

O se sei abbastanza sicuro che sarebbe nello schema dbo in qualunque database

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

Basato sulla risposta di Martin Smith sopra ma generalizzata in una visione per dare una sorta di versione cross-DB di 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)

Ora, se solo potessi trovare un modo per fare lo stesso per le colonne .......

EDIT - Ignora questo, trovandolo a volte manca del tutto i tavoli.

Chiarimenti minori solo per evitare mal di testa a quelli con "SuperUser" che non sanno come nominare i DB:

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

Invece di [yourtable], digitare il nome della tabella mancante ed eseguire nuovamente il risultato.

EXEC sp_MSForEachDB '
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
    PRINT ''?''
'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top