Tenho três bancos de dados de aplicativos: A, B e C. Os usuários de A e B são todos usuários de C; os usuários de A estão na função pública apenas com permissão SELECT, enquanto os usuários de B estão em uma função com mais permissões. Devido a algumas mudanças recentes, todos os usuários em C precisam estar na outra função e não apenas no público. Como isso sairá como um patch de banco de dados e será executado automaticamente em mais de 150 bancos de dados, prefiro que seja um script simples e geral ... ou seja, uma única instrução que diga "coloque todos os usuários nesta função". Sei que posso usar o script abaixo para criar instruções exec, percorrer os resultados e executá-los, mas espero algo um pouco mais simplificado. Já procurei por todo lugar e não encontro nada, mas tem
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 tem uma postagem no blog sobre a substituição de xp_execresultset que no SQL 2000 fez o que você deseja: Substituindo xp_execresultset no SQL Server 2005