9

テーブルをサーバーにエクスポートしましたが、テーブルが見つかりません。適切な宛先データベースを配置しなかった可能性があります。サーバーに複数のデータベースがある場合、それぞれを開かずにこのテーブルを見つけるにはどうすればよいですか?

MS Sql Server Management Studio 2008 を使用しています。

4

6 に答える 6

13

ラフで汚いですが、それは仕事をするでしょう.

-- 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'
于 2009-03-04T13:57:31.143 に答える
3

上記のMartin Smithの回答に基づいていますが、sys.tablesの一種のクロスDBバージョンを提供するビューに一般化されています-

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)

さて、列に対して同じことを行う方法を考え出すことができれば......

編集 - これは無視してください。テーブルが完全に欠落している場合があります。

于 2013-06-12T22:36:12.073 に答える
2

DB の命名方法を知らない「SuperUsers」のユーザーの頭痛の種を避けるためのマイナーな説明:

EXEC sp_MSForEachDB '
USE [?]
IF OBJECT_ID(''mytable'') IS NOT NULL AND
   OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
PRINT ''Found here: ?'''
于 2011-03-17T20:29:21.310 に答える
1
select 'select * from '+name+'.sys.tables where name=
        ''[yourtable]'';' from sys.databases

[yourtable] の代わりに、欠落しているテーブルの名前を入力し、結果を再度実行します。

于 2009-03-04T13:54:46.737 に答える