Trova una tabella su più database SQL SERVER 2005
-
03-07-2019 - |
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.
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 ''?''
'