Use this script to migrate users between servers, run against original server and apply the results of the sp_help_revlogin procedure to the new server.

This method applies to the following scenarios:-

:• You transfer logins and passwords from SQL Server 7.0 to SQL Server 2005
• You transfer logins and passwords from SQL Server 2000 to SQL Server 2005.
• You assign logins to roles.

----- Begin Script, Create sp_help_revlogin procedure ----- 
            
USE master
GO IF OBJECT_ID ('sp_hexadecimal'IS NOT NULL
    
DROP PROCEDURE sp_hexadecimal GO CREATE PROCEDURE sp_hexadecimal
    
@binvalue varbinary(256),
    
@hexvalue VARCHAR(256OUTPUT
            
AS
DECLARE 
@charvalue VARCHAR(256) DECLARE @i INT
DECLARE 
@length INT
DECLARE 
@hexstring CHAR(16SELECT @charvalue '0x'  SELECT @i 1 SELECT @length DATALENGTH (@binvalue) SELECT @hexstring '0123456789ABCDEF' WHILE (@i <= @length)
    
BEGIN
    DECLARE 
@tempint INT
    DECLARE 
@firstint INT
    DECLARE 
@secondint INT
    SELECT 
@tempint CONVERT(INTSUBSTRING(@binvalue,@i,1))
    
SELECT @firstint FLOOR(@tempint/16)
    
SELECT @secondint @tempint - (@firstint*16)
    
SELECT @charvalue @charvalue +
                
SUBSTRING(@hexstring@firstint+11) +
                
SUBSTRING(@hexstring@secondint+11)
    
SELECT @i @i 1
    
END
SELECT 
@hexvalue @charvalue  GO  IF OBJECT_ID ('sp_help_revlogin'IS NOT NULL
    
DROP PROCEDURE sp_help_revlogin GO CREATE PROCEDURE sp_help_revlogin @login_name sysname NULL AS
DECLARE 
@name    sysname DECLARE @xstatus INT
DECLARE 
@binpwd  varbinary (256) DECLARE @txtpwd  sysname  DECLARE @tmpstr  VARCHAR (256DECLARE @SID_varbinary varbinary(85) DECLARE @SID_string VARCHAR(256) IF (@login_name IS NULL)
    
DECLARE login_curs CURSOR FOR
SELECT 
sidnamexstatuspassword
    
FROM master..sysxlogins
    
WHERE srvid IS NULL
        AND 
name <> 'sa' ELSE
DECLARE 
login_curs CURSOR FOR
SELECT 
sidnamexstatuspassword
    
FROM master..sysxlogins
    
WHERE srvid IS NULL
        AND 
name @login_name  OPEN login_curs
            
FETCH NEXT
    
FROM login_curs INTO @SID_varbinary@name@xstatus@binpwd  IF (@@fetch_status -1)
    
BEGIN
                PRINT 
'No login(s) found.'
                
CLOSE login_curs
                
DEALLOCATE login_curs
    
RETURN -1
    
END
SET 
@tmpstr '/* sp_help_revlogin script '
            
PRINT @tmpstr SET @tmpstr '** Generated '
            
CONVERT (VARCHARGETDATE()) + ' on ' @@SERVERNAME ' */'
            
PRINT @tmpstr
            
PRINT ''
            
PRINT 'DECLARE @pwd sysname'  WHILE (@@fetch_status <> -1)
    
BEGIN
    IF 
(@@fetch_status <> -2)
        
BEGIN
                    PRINT 
''
        
SET @tmpstr '-- Login: ' @name
                    
PRINT @tmpstr
        
IF (@xstatus 44
            
BEGIN -- NT authenticated account/group 
            
IF (@xstatus 11
                
BEGIN -- NT login is denied access 
                
SET @tmpstr 'EXEC master..sp_denylogin ''' @name ''''
                            
PRINT @tmpstr
                
END
            ELSE
                BEGIN 
-- NT login has access 
                
SET @tmpstr 'EXEC master..sp_grantlogin ''' @name ''''
                            
PRINT @tmpstr
                
END
            END
        ELSE
            BEGIN 
-- SQL Server authentication 
            
IF (@binpwd IS NOT NULL)
                
BEGIN -- Non-null password 
                
EXEC sp_hexadecimal @binpwd@txtpwd OUT
                
IF (@xstatus 20482048
                    
SET @tmpstr 'SET @pwd = CONVERT (varchar(256), ' @txtpwd ')'
                    
ELSE
                    SET 
@tmpstr 'SET @pwd = CONVERT (varbinary(256), ' @txtpwd ')'
                            
PRINT @tmpstr
                
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
                    
SET @tmpstr 'EXEC master..sp_addlogin ''' @name
                            
''', @pwd, @sid = ' @SID_string ', @encryptopt = '
                
END
            ELSE
                BEGIN
                    
-- Null password 
                
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
                            SEET 
@tmpstr 'EXEC master..sp_addlogin ''' @name
                            
''', NULL, @sid = ' @SID_string ', @encryptopt = '
                
END
            IF 
(@xstatus 20482048
                    
-- login upgraded from 6.5 
                
SET @tmpstr @tmpstr '''skip_encryption_old'''
                
ELSE
                SET 
@tmpstr @tmpstr '''skip_encryption'''
                        
PRINT @tmpstr
            
END
        END
                FETCH 
NEXT
        
FROM login_curs INTO @SID_varbinary@name@xstatus@binpwd
    
END
            CLOSE 
login_curs
            
DEALLOCATE login_curs  RETURN 0
GO
    
----- End Script -----  
            

Check that there are no orphanned users:-

EXEC sp_change_users_login 'Report'