• 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