備份/還原或跨環境遷移後,使用者建立的表擁有者可能變為原登入帳號 (如 usera),導致新環境下查詢報「物件不存在」或「使用者已存在」。統一改為 dbo 可消除此類問題。
sp_changeobjectowner (推薦)-- 單張表
EXEC sp_changeobjectowner 'usera.TableName', 'dbo';
-- 預存程序
EXEC sp_changeobjectowner 'usera.ProcName', 'dbo';
-- 批次腳本 (查詢產生腳本)
SELECT 'EXEC sp_changeobjectowner ''' + USER_NAME(uid) + '.' + name + ''', ''dbo'';'
FROM sysobjects
WHERE uid <> USER_ID('dbo') AND type IN ('U','P','V');
dbo。適合少量物件、偏好 GUI 的 DBA。
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
UPDATE sysobjects SET uid = 1 WHERE uid <> 1;
EXEC sp_configure 'allow updates', 0; RECONFIGURE WITH OVERRIDE;
dbo 自己的物件也改壞。EXEC sp_changedbowner 'dbo';
AUTHORIZATION dbo 或預設登入為 dbo 角色成員。sp_changeobjectowner 修正。SELECT USER_NAME(uid), name FROM sysobjects WHERE uid <> 1;