Frage

exportierte ich eine Tabelle mit einem Server, aber ich kann die Tabelle nicht finden. Vielleicht habe ich lege die richtige Zieldatenbank nicht. Wie kann ich diese Tabelle finden, wenn mein Server mehrere Datenbanken hat, ohne jeden einzelnen von ihnen zu öffnen?

Ich benutze MS SQL Server Management Studio 2008.

War es hilfreich?

Lösung

Raute und schmutzig, aber es würde die Arbeit machen.

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

Andere Tipps

Eine Möglichkeit,

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'

Oder wenn Sie einigermaßen sicher sind, es im dbo Schema in je nachdem, welche Datenbank würde

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

Basierend off Martin Smith Antwort oben, aber verallgemeinert in eine Ansicht, welche eine Art von Quer DB-Version von sys.tables zu geben -

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)

Nun, wenn nur ich kann einen Weg erarbeiten das gleiche für Spalten zu tun .......

EDIT - Ignorieren dieser, es zu finden manchmal vermißt Tabellen zusammen.

Minor Klärung nur zu vermeiden Kopfschmerzen für die mit ‚Superuser‘, die nicht wissen, wie DBs zu nennen:

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

Statt [yourtable], den Name der fehlenden Tabelle an, und das Ergebnis erneut ausgeführt werden.

EXEC sp_MSForEachDB '
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
    PRINT ''?''
'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top