2016-06-20 4 views
1

서버의 모든 데이터베이스에있는 특정 필드에있는 값을 확인하기 위해 SQL 쿼리를 조정하려고합니다.여러 데이터베이스에서 동일한 SQL 쿼리 수행

100 개의 개별 데이터베이스가 있으며 각 데이터베이스의 특정 레코드를 확인하고 싶습니다.

대답은 아마도 아래 명령을 사용하는 것이지만 적응하기가 어렵습니다.

EXECUTE sp_MSForEachDB 
    'USE ?; SELECT DB_NAME()AS DBName, 
    COUNT(1)AS [Count] FROM CUSTOMERS' 

나는 아래 링크에 더 큰 성공을 거두었습니다;

https://stackoverflow.com/a/18462734/3461845

나는이 쿼리를 수행 할 수 있어야합니다 :

SELECT [SettingName],[SettingValue] FROM [HostSettings] Where [SettingName] = 'SMTPServer' 

을 또한 반환되는 각 행에 대한 데이터베이스의 이름을 다시 당겨;

DBName | SettingName | SettingValue 

Database1 | SMTPServer | smtp.gmail.com 

Database2 | SMTPServer | smtp.gmail.com 

Database3 | SMTPServer | smtp.yahoo.com 

모든 도움을 주시면 감사하겠습니다.

감사합니다.

답변

2
DECLARE @T TABLE 
([DbName] SYSNAME, 
[SettingName] VARCHAR(255), 
[SettingValue] VARCHAR(255)); 

INSERT INTO 
@T 
EXEC sp_MSForEachDB 
'SELECT 
    ''?'', 
    [SettingName], 
    [SettingValue] 
FROM 
    [?]..[HostSettings] 
WHERE 
    [SettingName] = ''SMTPServer'''; 

SELECT * FROM @T; 
+0

답장을 보내 주셔서 감사합니다. 다음 오류가 나타납니다. '-'근처에 구문이 잘못되었습니다. 나는 구글을 가지고 있었고, 공백과 관련이 있을지 모르지만 나는 할 수있는 것들을 제거하려고 시도해 왔지만 아직도 작동하지 않는다. – Birksy89

+0

내 테이블 이름에 하이픈이 들어 있기 때문에 이것이라고 생각합니다 ... 지금 이것을 해결하려고합니다. – Birksy89

0

SSMS에서 등록 된 서버를 사용할 수 있습니다. 모든 데이터베이스에서 동일한 쿼리를 실행합니다. SSMS에서

  1. ,

  2. 그런 다음 등록 된 서버

  3. 오른쪽

  4. 유형 로컬 서버 그룹에 다음 새 서버 그룹을 클릭 보기로 이동 G의 이름

  5. roup

    그런 다음 사용자가 만든 그룹 이름을 마우스 오른쪽 버튼으로 클릭하고 새 서버 등록

  6. 그리고 서버 이름 로컬 호스트 (예를 들어)

  7. 그런 다음 마우스 오른쪽 로컬 호스트을 클릭하고 새 쿼리. 모든 데이터베이스에서 동일한 쿼리가 실행됩니다.

+0

나는 이것을 시도하고, 내 시나리오에 대해 작동하지 않습니다. – Birksy89

0

아래 무시하십시오. 이 시도.

DECLARE @sql VARCHAR(8000) 
DECLARE @string VARCHAR(100)= 'SMTPServer' 
SET @sql = 'EXECUTE sp_MSForEachDB 
    ''USE ?; SELECT DB_NAME()AS DBName, 
     SettingName, 
     SettingValue 
    FROM HostSettings 
    WHERE SettingName =''' + '''' + @string +'''''' + '''' 

EXEC (@sql) 
관련 문제