서버에 테이블을 내보냈지만 테이블을 찾을 수 없습니다. 어쩌면 나는 올바른 목적지 데이터베이스를 넣지 않았을 것이다. 내 서버에 여러 데이터베이스가 있고 각 데이터베이스를 열지 않고이 테이블을 찾으려면 어떻게해야합니까?여러 데이터베이스에서 테이블 찾기 SQL Server 2005
나는 MS SQL Server 관리 Studio는 2008 년
서버에 테이블을 내보냈지만 테이블을 찾을 수 없습니다. 어쩌면 나는 올바른 목적지 데이터베이스를 넣지 않았을 것이다. 내 서버에 여러 데이터베이스가 있고 각 데이터베이스를 열지 않고이 테이블을 찾으려면 어떻게해야합니까?여러 데이터베이스에서 테이블 찾기 SQL Server 2005
나는 MS SQL Server 관리 Studio는 2008 년
거칠고 더럽지 만 작업을 수행 할 수 있습니다.
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
대신 [yourtable]의 누락 된 테이블의 이름을 입력하고 다시 결과를 실행 사용합니다.
EXEC sp_MSForEachDB '
USE ?
IF OBJECT_ID(''mytable'') IS NOT NULL AND
OBJECTPROPERTY(OBJECT_ID(''mytable''), ''IsTable'') = 1
PRINT ''?''
'
마이너 설명은 데시벨의 이름을하는 방법을 모른다 '수퍼 유저'로 사람들에게 두통을 피하기 위해 어느 데이터베이스에서든지 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
이므로 데이터베이스 이름을 이스케이프 처리했습니다. 좋은 전화 –
한 가지 방법
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'
(210)는 sys.tables의 크로스 DB 버전의 종류를 제공하는보기에 위의 마틴 스미스의 답변을 기반으로하지만, 일반화 열에 대해서도 마찬가지입니다 .......
EDIT - 이것을 무시하면 테이블을 모두 잃어 버리는 경우가 있습니다.
sp_MSforeachdb를 사용하는 경우 +1입니다. – cdonner
2 년 간의 SQL Server 지원이 유용 할 수 있습니다. –