Question

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

J'utilise MS SQL Server Management Studio 2008.

Était-ce utile?

La solution

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

Autres conseils

À sens unique

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, cela figurerait dans le schéma dbo de 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 

Basé sur la réponse de Martin Smith ci-dessus, mais généralisé en vue de donner une sorte de version croisée 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 pouvais trouver un moyen de faire la même chose pour les colonnes .......

EDIT - Ignorez ceci, le trouver manque parfois des tables.

Une clarification mineure, juste pour éviter les maux de tête aux "superutilisateurs" qui ne savent pas comment nommer les 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

Au lieu de [votre table], tapez le nom de la table manquante et réexécutez le résultat.

EXEC sp_MSForEachDB '
USE ? 
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
    PRINT ''?''
'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top