För att förena användaren med inloggningen kan du använda den systemlagrade proceduren sp_change_users_login.
sp_change_users_login [ @Action = ] 'action'
[ , [ @UserNamePattern = ] 'user' ]
[ , [ @LoginName = ] 'login' ]
[ , [ @Password = ] 'password' ];
Till exempel:
EXEC sp_change_users_login 'Update_One','User123','User123'
Om du har många användare som inte är synkroniserade kan du använda en markör för att dra ut alla användare och köra det här kommandot åt dem. Det finns ingen negativ effekt av att köra detta mot användare som inte är ur synk, och det kommer att fixa alla föräldralösa användare.
DECLARE @sql NVARCHAR(MAX);
DECLARE curSQL CURSOR
FOR
SELECT 'EXEC sp_change_users_login ''UPDATE_ONE'', ''' + name + ''', ''' + name + ''''
FROM sysusers
WHERE issqluser = 1
AND name NOT IN ( 'guest', 'dbo', 'sys', 'INFORMATION_SCHEMA' )
OPEN curSQL
FETCH curSQL INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC (
@sql
)
FETCH curSQL INTO @sql
END
CLOSE curSQL
DEALLOCATE curSQL
Detta måste köras i sammanhanget för databasen du behöver fixa användarna i.