Finden Sie eine Tabelle über mehrere Datenbanken SQL Server 2005
-
03-07-2019 - |
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.
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 ''?''
'