2009-03-04 8 views
9

J'ai exporté une table vers un serveur mais je ne trouve pas la table. Peut-être que je n'ai pas mis la bonne base de données de destination. Comment puis-je trouver cette table si mon serveur a plusieurs bases de données, sans ouvrir chacune d'entre elles?Trouver une table sur plusieurs bases de données SQL Server 2005

J'utilise MS SQL Server Management Studio 2008.

Répondre

13

Rough et sale, mais cela ferait l'affaire.

-- 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 pour l'utilisation de sp_MSforeachdb, que je ne connaissais pas. – cdonner

+0

C'est lorsque vous découvrez que deux ans de support SQL Server peuvent être utiles :) –

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

au lieu de [yourtable], tapez le nom de la table manquante, et exécutez à nouveau le résultat.

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

clarification mineure juste pour éviter des maux de tête pour ceux qui ont '' superutilisateurs qui ne savent pas comment nommer DB:

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

de sorte que vous avez échappé au nom de la base de données. bon appel –

5

Une façon

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' 

Ou si vous êtes raisonnablement confiant dans le schéma dbo dans la base de données

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

Excellente idée, merci. Généralisé dans une vue et sauvé, juste ce dont j'avais besoin! – eftpotrm

+0

@eftpotrm - Ah, j'ai un meilleur moyen que ça maintenant. [Voici un lien] (http://stackoverflow.com/a/16520904/73226) –

+0

Merci - Je me suis retrouvé avec une exigence légèrement différente donc ça ne marchera pas vraiment pour moi je pense. Dommage :-) Ajouter le mien comme une réponse dans un mo. – eftpotrm

3

basé au large Martin réponse de Smith ci-dessus, mais généralisée en vue de donner une sorte de version cross-DB 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) 

Maintenant, si seulement je peux trouver une façon de le faire Idem pour les colonnes ...

EDIT - Ignorez cela, car il manque parfois des tables.

Questions connexes