15023: User already exists in the current database (el usuario ya existe en la base de datos actual)
SQL Server¿Qué significa?
Al añadir un nuevo usuario a la base de datos, se encontró que ya existe un usuario con el mismo nombre en esa base de datos. También aparece al asignar un login a un usuario existente (usuarios huérfanos).
¿Por qué ocurre?
Normalmente, cuando una base de datos se restaura desde un backup en otro servidor, los SID de los logins no coinciden con los usuarios de la base de datos (usuarios huérfanos). Intentar añadir el mismo nombre de nuevo con CREATE USER, o intentar configurar manualmente la asignación login-usuario, genera este error.
Cómo solucionarlo
Vuelva a asignar el usuario huérfano al login existente: ALTER USER app_user WITH LOGIN = login_name; (recomendado frente al sp_change_users_login legacy). Si el usuario es realmente redundante: DROP USER app_user; Para encontrar huérfanos: SELECT dp.name FROM sys.database_principals dp LEFT JOIN sys.server_principals sp ON dp.sid = sp.sid WHERE sp.sid IS NULL AND dp.type IN ('S','U');
Más entradas de este motor
- 8114Error converting data type X to Y
- 1204The instance of the SQL Server Database Engine cannot obtain a LOCK resource (la instancia de SQL Server Database Engine no puede obtener un recurso LOCK)
- 3906Failed to update database because the database is read-only (no se pudo actualizar la base de datos porque es de solo lectura)
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication (error de login; el login procede de un dominio no confiable y no puede usarse con autenticación de Windows)
- 605Attempt to fetch logical page belongs to a different allocation unit (la página lógica solicitada pertenece a otra allocation unit)
- 4922ALTER TABLE ALTER COLUMN failed because one or more objects access this column (falló ALTER TABLE ALTER COLUMN porque uno o más objetos acceden a esta columna)
- 7202Could not find server 'name' in sys.servers (no se encontró el servidor en sys.servers)