15023: User already exists in the current database(ユーザーは現在のデータベースに既に存在する)
SQL Server意味
データベースに新しいユーザーを追加する際、同名のユーザーがそのデータベースに既に存在していた。ログインを既存のユーザーにマッピングする場合 (孤立ユーザー) にも発生する。
原因
典型的には、データベースをバックアップから別のサーバーにリストアすると、ログインの SID がデータベースユーザーと一致しない (孤立ユーザー)。CREATE USER で同じ名前を再度追加しようとしたり、ログインとユーザーのマッピングを手動で設定しようとしたりすると、このエラーが発生する。
対処方法
孤立ユーザーを既存のログインに再マッピングする: ALTER USER app_user WITH LOGIN = login_name; (旧来の sp_change_users_login より推奨)。ユーザーが本当に不要な場合: DROP USER app_user; 孤立ユーザーの検出: 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');
同じデータベースの他の項目
- 8114Error converting data type X to Y(データ型 X から Y への変換エラー)
- 1204The instance of the SQL Server Database Engine cannot obtain a LOCK resource(SQL Server データベースエンジンのインスタンスが LOCK リソースを取得できない)
- 3906Failed to update database because the database is read-only(データベースが読み取り専用のため更新に失敗)
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication(ログイン失敗。信頼されていないドメインからのログインで Windows 認証に使用できない)
- 605Attempt to fetch logical page belongs to a different allocation unit(取得しようとした論理ページが別のアロケーションユニットに属する)
- 4922ALTER TABLE ALTER COLUMN failed because one or more objects access this column(1 つ以上のオブジェクトがこの列にアクセスしているため ALTER TABLE ALTER COLUMN が失敗)
- 7202Could not find server 'name' in sys.servers(sys.servers にサーバー 'name' が見つからない)