2009-03-04 9 views
9

서버에 테이블을 내보냈지만 테이블을 찾을 수 없습니다. 어쩌면 나는 올바른 목적지 데이터베이스를 넣지 않았을 것이다. 내 서버에 여러 데이터베이스가 있고 각 데이터베이스를 열지 않고이 테이블을 찾으려면 어떻게해야합니까?여러 데이터베이스에서 테이블 찾기 SQL Server 2005

나는 MS SQL Server 관리 Studio는 2008 년

답변

13

거칠고 더럽지 만 작업을 수행 할 수 있습니다.

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

sp_MSforeachdb를 사용하는 경우 +1입니다. – cdonner

+0

2 년 간의 SQL Server 지원이 유용 할 수 있습니다. –

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

대신 [yourtable]의 누락 된 테이블의 이름을 입력하고 다시 결과를 실행 사용합니다.

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

마이너 설명은 데시벨의 이름을하는 방법을 모른다 '수퍼 유저'로 사람들에게 두통을 피하기 위해 어느 데이터베이스에서든지 dbo 스키마에 있다고 확신 할 수 있습니다.

단지 내가 할 수있는 방법을 작동 할 수있는 경우,

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) 

지금 -

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

이므로 데이터베이스 이름을 이스케이프 처리했습니다. 좋은 전화 –

5

한 가지 방법

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' 

또는 경우를 :

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

좋은 생각, 고마워. 그것을보기로 일반화하고 저장했습니다. 내가 필요한 것뿐입니다! – eftpotrm

+0

@eftpotrm - 아 지금 이보다 나은 방법이 있습니다. [여기 링크가 있습니다] (http://stackoverflow.com/a/16520904/73226) –

+0

고마워요. 저는 약간 다른 요구 사항에 봉착했습니다. 그렇게 생각하지 않아도 될 것 같습니다. 안타깝습니다 :-) 한 달에 광산을 답으로 추가하십시오. – eftpotrm

3

(210)는 sys.tables의 크로스 DB 버전의 종류를 제공하는보기에 위의 마틴 스미스의 답변을 기반으로하지만, 일반화 열에 대해서도 마찬가지입니다 .......

EDIT - 이것을 무시하면 테이블을 모두 잃어 버리는 경우가 있습니다.