2016-04-04 4 views
0

同じサーバー上に複数のデータベースがあるとします。データベースを選択せず​​に、単一のクエリを使用して特定のユーザーを検索したい。私は、特定のユーザーがどのデータベースに属しているかを知りたがっています。出来ますか?異なるデータベース内の特定のユーザーを検索したい

+1

"特定のユーザーを検索する" - SQL Serverアカウント、または "ユーザー"テーブルの行?明らかにする。 –

+0

私はユーザーに関するすべての詳細を格納する複数のデータベースを持っています。今のシナリオは私が名前と姓、電子メールIDのようなユーザー情報しか持っていないときに、ユーザーから要求があったときです。今私は私が同じサーバー上に存在するすべてのデータベースからユーザーを検索する必要があります。ユーザーはどのデータベースに属しています。 –

+0

次に、すべての異なるデータベースを反復処理できるストアドプロシージャが必要です。これはうまくいくが、データベースを移行したり、新しいデータベースを追加しなければならない場合は、これは貧弱な設計である。同じユーザー名が2つのデータベースで使用されている場合 - あなたは嫌です。 –

答えて

0

これはどうですか?

declare @dbs varchar(500), 
     @db int, 
     @dbname varchar(500), 
     @sql nvarchar(500), 
     @username varchar(500) 
declare C cursor for select name from sysdatabases 
open C 
fetch C into @dbname 
set @dbs = '' 
set @username = '<the user you are looking for>' 
while @@FETCH_STATUS = 0 
begin 
    set @sql = N'select @db=count(*) from ' + @dbname + '.dbo.sysusers where name = ''' + @username + '''' 
    exec sp_executesql @sql, N'@db int output', @db output 
    if @db > 0 
     set @dbs = @dbs + @dbname + ', ' 
    fetch C into @dbname 
end 
close C 
deallocate C 
select @dbs 

私はあなたを探しているユーザーが存在するすべてのデータベースのカンマ区切りのリストを提供します。 その後、このクエリを適合させることができます。単なるヒントです。

+0

これはSQLインジェクションの影響を受けやすく、すべてのユーザー入力をパラメータ化する必要があります。 – Dane

+0

さて、私はここにユーザーの入力が表示されません:-)これは、古い良いTSQLがSSMSを使い果たしていることです。 SQLインジェクションはどこから来るべきですか? – Gabor