Per riconciliare l'utente con il login, è possibile utilizzare la stored procedure di sistema sp_change_users_login.
sp_change_users_login [ @Action = ] 'action'
[ , [ @UserNamePattern = ] 'user' ]
[ , [ @LoginName = ] 'login' ]
[ , [ @Password = ] 'password' ];
Ad esempio:
EXEC sp_change_users_login 'Update_One','User123','User123'
Se hai molti utenti che non sono sincronizzati, puoi utilizzare un cursore per estrarre tutti gli utenti ed eseguire questo comando per loro. Non c'è alcun effetto negativo nell'esecuzione di questa operazione contro utenti che non sono sincronizzati e risolverà tutti gli utenti orfani.
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
Questo deve essere eseguito dal contesto del database in cui gli utenti devono essere riparati.