How to remap orphaned SQL Server users after a restore

SQL-Server

If you copy (backup/restore) a database from system A to system B, it is possible that the SQL users won't be able to login, and this is because the GUID/SID of the users on system A doesn't match the GUID/SID of system B.

It uses the EXEC sp_change_users_login 'Auto_Fix', which links a user entry in the sys.database_principals system catalog view in the current database to a SQL Server login of the same name.

This code will fix all users in the database that you are executing the SQL code on. (I use this very often)

CREATE TABLE dbo.temp_OrphanUsers
        (
        UserName varchar(250) NULL,
        UserSID varchar(500) NULL
        )  ON [PRIMARY]

INSERT INTO dbo.temp_OrphanUsers
EXEC sp_change_users_login 'Report'

DECLARE curOU CURSOR FOR
        SELECT UserName FROM dbo.temp_OrphanUsers
OPEN curOU

DECLARE @OUUserName VARCHAR(250)
FETCH NEXT FROM curOU INTO @OUUserName
WHILE (@@FETCH_STATUS <> -1)
BEGIN
        IF (@@FETCH_STATUS <> -2)
        BEGIN
                BEGIN TRY
                        EXEC sp_change_users_login 'Auto_Fix', @OUUserName
                END TRY
                BEGIN CATCH
                        PRINT 'Unable to auto-fix ' + @OUUserName + ' - User may not have a login'
                END CATCH
        END
FETCH NEXT FROM curOU INTO @OUUserName
END
CLOSE curOU
DEALLOCATE curOU

DROP TABLE temp_OrphanUsers
GO