I wrote this for a recent project, does this help?
SELECT 'IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = '+ name + ') ' + char(13)
+ 'CREATE USER [' + CONVERT(char(20), name + ']') + ' FOR LOGIN [' + CONVERT(char(20), name + ']') + ' WITH DEFAULT_SCHEMA = dbo'
FROM sys.database_principals WHERE type IN ('S', 'U') and principal_id > 4
SELECT 'EXEC sys.sp_addrolemember @rolename = ' + CONVERT(char(25), b.name) + ' , @membername = ' + CONVERT(char(20), c.name)
from sys.database_role_members a JOIN sys.database_principals b on a.role_principal_id = b.principal_id
JOIN sys.database_principals c on a.member_principal_id = c.principal_id
WHERE b.type = 'R' and c.name != 'dbo'
ORDER by b.name, c.name