1

我想在 SP 过程中打印出实际数据库的数据库用户(参见sp_PrintUsers下面的代码),但是,由于某种原因,它会打印出 master 的数据库用户。尽管事实上任何数据库级 SQL 语句都在实际数据库中执行,但这似乎是所有数据库级视图的 SP 过程的一般行为。如果我们打印出来DB_NAME显然不是master,那么有什么问题呢?

有什么解决方法吗?

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;');

如果这无助于构建查询以引用具有三部分名称的目录视图。

于 2013-02-20T14:02:56.190 回答
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
于 2013-02-20T14:05:56.330 回答