당신이 foo
라는 이름의 로컬 데이터베이스 사용자를 가정하면, 찾아이 쿼리를 사용할 수 있습니다
SELECT [local].[name], [remote].[name]
FROM sys.database_principals AS [local]
INNER JOIN [splunge].sys.database_principals AS [remote]
ON [local].[sid] = [remote].[sid]
WHERE [local].[name] = 'foo';
당신이 모르는 경우 다른 어떤 데이터베이스 (들) 관련 로그인이 발견 될 수 있습니다, 그렇다면 아니오, 당신이 지적한 다른 질문에 대답과 같은 쿼리를 구성하지 않고 간단한 방법이 없습니다. 것보다 쉽게이 조금 할
http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx
http://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb
한 가지 방법 : 당신이 sp_msForEachDB을 사용하려는 경우,주의를하시기 바랍니다
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql = @sql + '
UNION ALL SELECT ''' + QUOTENAME(name)
+ ''', name COLLATE SQL_Latin1_General_CP1_CI_AS
FROM ' + QUOTENAME(name) + '.sys.database_principals
WHERE sid IN (SELECT sid FROM x)'
FROM sys.databases
WHERE database_id > 4; -- assume ignore system dbs
SET @sql = ';WITH x AS (SELECT sid FROM sys.database_principals
WHERE name = ''foo'')' + STUFF(@sql, 1, 12, '') + ';';
PRINT @sql;
--EXEC sp_executesql @sql;
이 충족되지 않는 "단일 쿼리"의 요구 사항이지만 어쩌면 왜 그것이 요구 사항인지 설명 할 수 있습니다.