移除SQL服务器用户遇阻:多所有者表的架构处理疑问
解决SQL Server用户移除及架构依赖问题
核心概念纠正
SQL Server中,一张表只能归属一个架构,不存在“多个架构共同拥有同一张表”的情况。你所说的“其他用户架构共同拥有”,实际应该是其他用户对该表拥有访问/操作权限,而非架构层面的归属权。
ALTER SCHEMA语句的作用
你提供的语句:
ALTER SCHEMA dbo TRANSFER OtherUserSchema.TargetTable; GO
这条语句会将OtherUserSchema架构下的TargetTable完整转移到dbo架构,转移完成后:
- 该表的归属架构变为
dbo,原OtherUserSchema架构下不再存在此表 - 其他用户对该表的权限不会被移除(只要之前配置了对应权限),完全满足“其他用户仍需使用该表且保留权限”的需求
处理删除用户的错误提示
你遇到的错误:
Cannot drop schema 'BDR\TPRGOMET' because it is being referenced by object 'xkartkont'.
这说明BDR\TPRGOMET架构下仍有xkartkont对象(大概率是表)依赖,解决步骤如下:
- 先将该对象转移到其他架构(比如
dbo):
注意带域名的架构名称需要用方括号ALTER SCHEMA dbo TRANSFER [BDR\TPRGOMET].xkartkont; GO[]包裹,避免语法错误 - 确认该架构下无其他依赖对象:
SELECT * FROM sys.objects WHERE schema_id = SCHEMA_ID('BDR\TPRGOMET'); GO - 删除架构:
DROP SCHEMA [BDR\TPRGOMET]; GO - 最后从服务器层面删除用户:
DROP LOGIN [BDR\TPRGOMET]; GO
带域名的架构相关问题
带域名的架构(对应Windows域用户)本身不会引发特殊问题,操作时只需注意:
- 引用这类架构时必须用方括号
[]包裹名称,避免SQL Server将域名反斜杠解析为语法符号 - 确保操作时拥有足够的权限(通常需要
ALTER ANY SCHEMA及对应对象的权限)
内容的提问来源于stack exchange,提问作者EternallyConfused
相关产品推荐
相关产品推荐

