我想在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
答案 0 :(得分:1)
尝试动态执行选择,如:
EXEC('select name from sys.database_principals;');
如果这无法帮助构建查询以引用具有三部分名称的目录视图。
答案 1 :(得分:0)
试试这个:
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