我有三个应用数据库:A、B和C。A和B的用户都是C中的用户;来自 A 的用户属于公共角色,只有 SELECT 权限,而来自 B 的用户属于具有更多权限的角色。由于最近的一些变化,C 上的所有用户都需要处于其他角色,而不仅仅是公共角色。由于这将作为数据库补丁发布并在 150 多个数据库上自动执行,因此我希望它是一个简单的、全面的脚本......即,一个声明“让所有用户担任这个角色”的单一语句。我知道我可以使用下面的脚本来创建 exec 语句并遍历结果并执行它们,但我希望有一些更精简的东西。我找遍了整个地方,找不到任何东西,但是有'
SELECT 'EXECUTE sp_AddRoleMember ''' + roles.name + ''', ''' + users.name + ''''
FROM sys.database_principals users
INNER JOIN sys.database_role_members link ON link.member_principal_id = users.principal_id
INNER JOIN sys.database_principals roles ON roles.principal_id = link.role_principal_id
WHERE roles.name = 'TheNewRole'
Adam Machanic 有一篇关于替换 xp_execresultset 的博客文章,它在 SQL 2000 中做了你想做的事:Replacing xp_execresultset in SQL Server 2005