2016-09-20 5 views
0

인스턴스의 모든 데이터베이스에서 모든 동의어 목록을 보려고합니다. 대다수의 데이터베이스에는 동의어가 하나 뿐이지 만 각 인스턴스에는 수백 개의 데이터베이스가 있습니다. 이상적으로는이 같은보고 결과를 싶습니다전체 인스턴스의 모든 데이터베이스 및 해당 동의어 목록

열을 1 : 데이터베이스 이름

열 2 : 동의어 이름

열 3 :의 정확한 텍스트를 표시 할 기본 오브젝트 이름 (또는 다른 어떤 동의어)

이 쿼리는 원하는 작업보다 적은 작업을 수행하지만 단일 데이터베이스에서만 작동합니다.

select db_id(parsename(base_object_name, 3)) as dbid 
    , object_id(base_object_name) as objid 
    , base_object_name 
from sys.synonyms;' 

위의 쿼리를 변경하여 모든 데이터베이스에 대한 결과를 표시하려고 시도했지만 아래 쿼리로 끝났습니다. 실행을 실패하지는 않지만 결과를 산출하지는 못합니다. 올바른 열 이름을 가진 수백 개의 빈 테이블을 인쇄합니다. 인스턴스의 각 데이터베이스의 모든 동의어 중 하나 개 깨끗한 목록을 얻을 수있는 방법을 찾는 것 좀 도와 수 있다면

DECLARE @command varchar(1000) 
SELECT @command = 'select db_id(parsename(base_object_name, 3)) as dbid 
    , object_id(base_object_name) as objid 
    , base_object_name 
from sys.synonyms;' 
EXEC sp_MSforeachdb @command 

나는 매우 감사하게 될 것입니다.

답변

2

매우 가까이 있습니다. 데이터베이스 이름을 볼 수 있도록 내가 다른 컬럼으로 데이터베이스 이름을 추가 한

DECLARE @command varchar(1000) 
SELECT @command = 'use [?] select ''[?]'', db_id(parsename(base_object_name, 3)) as dbid 
    , object_id(base_object_name) as objid 
    , base_object_name 
from sys.synonyms;' 
EXEC sp_MSforeachdb @command 

, 나는 당신이 거라고 확신 : 당신은 그렇지 않으면 당신의 모든 조건 master 내에서 실행하는 use를 추가해야 아마도 실제로이 쿼리를 각 개별 데이터베이스에 대해 실제로 실행하고 싶을 것입니다.

+0

매력처럼 작동합니다. 고맙습니다! – QWE

관련 문제