2010-07-17 54 views

回答

3

不要使用sp_helplogins:使用sys.server_principals

SELECT * FROM sys.server_principals WHERE name = 'bob' 

如果你想sp_helplogins的第二个结果集,那么你就必须使用C#或东西,因为加载一个临时表将只捕获1号的结果集。

sys.server_principals相对应的是sys.database_principals

FYI:是的db_owner在每个数据库了。你真的想做什么...?

编辑,注释后,类似:

EXEC sp_MSForEachDb ' 
USE ? 
IF DATABASE_PRINCIPAL_ID (''myloginname'') IS NOT NULL 
    EXEC sp_addrolemember ''db_datareader'', ''myloginname'' 
' 
+0

我想查找哪些数据库属于特定用户并在脚本下运行:USE DbName GO EXEC sp_addrolemember db_datareader, myloginname GO Stan 2010-07-17 09:22:54

1

您可以转移一个存储过程的结果集到一个新表,例如

create table #results (...) 
insert into #results execute myproc 
select * from #results where ... 

这有点烦琐,因为你必须相当精确地对结果集数据类型进行反向工程,以避免造成错误。

+1

如果什么SP 2个返回结果集? – Stan 2010-07-17 08:25:50

+0

那么,如果人们需要改进SP输出结果集,人们会做什么? – Stan 2010-07-17 08:30:06

+1

我刚刚检查过MSDN,看来所有结果集都加载到一个表中。如果结果集在列定义中存在差异,那恐怕没有用。 – 2010-07-17 08:31:59