错误试图删除数据库用户帐户架构
问题描述:
我试图从数据库中删除用户的模式,我发现了以下错误:错误试图删除数据库用户帐户架构
TITLE: Microsoft SQL Server Management Studio
------------------------------
Drop failed for Schema 'ext_owner'. (Microsoft.SqlServer.Smo)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=9.00.4035.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Drop+Schema&LinkId=20476
------------------------------
ADDITIONAL INFORMATION:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
------------------------------
Cannot drop schema 'ext_owner' because it is being referenced by object 'getroles'. (Microsoft SQL Server, Error: 3729)
For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.4035&EvtSrc=MSSQLServer&EvtID=3729&LinkId=20476
------------------------------
BUTTONS:
OK
------------------------------
什么是getroles对象?
如何摆脱引用,以便我可以删除旧的用户帐户?
答
SELECT * FROM sys.objects
WHERE name = 'getroles'
AND schema_id = SCHEMA_ID('ext_owner');
然后做:
DROP <object type> ext_owner.getroles;
--or
ALTER SCHEMA <some other schema> TRANSFER ext_owner.getroles;
你可能不得不重复这一堆。您不能删除非空的模式。
+0
当我执行这个陈述时什么都没有显示出来。我得到不能删除模式'bob222',因为它正在被对象'LanguagePackImport'引用 – 2014-02-05 15:31:00
答
您可以查询system table sys.objects
以试图找到更多关于哪些getroles可能的信息。
尝试
SELECT * FROM sys.objects WHERE name LIKE '%getroles%'
这应该给你的对象是什么的一些信息。此时,您可以删除它或决定更改模式,以便不再引用它。
答
尝试使用:
SELECT * FROM sys.objects WHERE name = 'getroles'
我的猜测是,它是用户自己的模式下创建的(可能是意外的函数或存储过程丢弃它(如果不是正在使用它),你应该。 。好去
导致此错误的命令是什么?另外,每个用户都有自己的模式?!我当然误解了。 – 2009-12-18 16:56:44
我试图删除用户,并要求我问我是否也想删除架构。我所做的只是点击用户,点击删除。 – Jason 2009-12-18 17:01:28
您应该熟悉用于处理此类操作的DDL命令。所有的图形用户界面都会隐藏你的这些信息,并且使你更难破译出现的问题。 SSMS中的大多数对话框将允许您单击顶部的脚本按钮,这是学习DDL的一种快速方法,可用于您通常可以依赖GUI的事情(并且应该让您更清楚地了解获取这些事件时发生的情况错误消息)。 – 2009-12-18 17:13:12