1

SP プロシージャ (以下のコードを参照) で実際のデータベースのデータベース ユーザーを出力したいのですがsp_PrintUsers、何らかの理由で master のデータベース ユーザーが出力されます。データベース レベルの SQL ステートメントが実際のデータベースで実行されるという事実にもかかわらず、すべてのデータベース レベルのビューに対する SP プロシージャの一般的な動作のようです。DB_NAME明らかにマスターではないことを出力すると、何が問題なのですか?

回避策はありますか?

use [master]
go
create procedure sp_PrintUsers
as
begin
    SELECT DB_NAME() AS DataBaseName
    select name from sys.database_principals;
end
go

use [actual_database]
go

exec sp_PrintUsers
4

2 に答える 2

1

次のように選択を動的に実行してみてください。

EXEC('select name from sys.database_principals;');

それでも解決しない場合は、クエリを作成して、3 つの部分からなる名前でカタログ ビューを参照します。

于 2013-02-20T14:02:56.190 に答える
0

Try this :

use [master]
go
create procedure sp_PrintUsers
as
begin
    declare @dbname varchar(30) = DB_NAME()
    EXEC ('select name from ' + @dbname + '.sys.database_principals');        
end
go

use [actual_database]
go

exec sp_PrintUsers
于 2013-02-20T14:05:56.330 に答える