2009-03-04 19 views

Respuesta

13

áspero y sucio, pero haría el trabajo.

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

+1 para usar sp_MSforeachdb, que no sabía. – cdonner

+0

Esto es cuando descubres que dos años de soporte SQL Server pueden ser útiles :) –

1
select 'select * from '+name+'.sys.tables where name= 
     ''[yourtable]'';' from sys.databases 

En lugar de [yourtable], escriba el nombre de la tabla que falta, y ejecutar de nuevo el resultado.

1
EXEC sp_MSForEachDB ' 
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND 
    OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1 
    PRINT ''?'' 
' 
2

aclaración Menor sólo para evitar dolores de cabeza para los que tienen '' súper usuarios que no saben cómo nombrar DB:

EXEC sp_MSForEachDB ' 
USE [?] 
IF OBJECT_ID(''mytable'') IS NOT NULL AND 
    OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1 
PRINT ''Found here: ?''' 
+0

por lo que escapó del nombre de la base de datos. buena llamada –

5

Una forma

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 si está razonablemente seguro de que estaría en el esquema dbo en cualquier base de datos

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

Gran idea, gracias. ¡Lo generalicé en una vista y guardé, justo lo que necesitaba! – eftpotrm

+0

@eftpotrm - Ah, ahora tengo una mejor manera que esto. [Aquí hay un enlace] (http://stackoverflow.com/a/16520904/73226) –

+0

Gracias - Terminé con un requisito ligeramente diferente, así que creo que no me va a funcionar del todo. Lástima :-) Agregar el mío como respuesta en un mo. – eftpotrm

3

Basado de la respuesta de Martin Smith anteriormente, pero generalizado en el fin de dar una especie de cruzada DB versión de 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) 

Ahora, si sólo yo puedo encontrar una forma de hacer lo mismo para las columnas .......

EDITAR - Ignora esto, encontrarlo a veces pierde tablas por completo.

Cuestiones relacionadas