5

我正在尝试从数据库中删除用户的架构,但出现以下错误:

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 对象是什么?

如何摆脱引用,以便删除旧用户帐户?

4

3 回答 3

7
SELECT * FROM sys.objects 
WHERE name = 'getroles' 
AND schema_id = SCHEMA_ID('ext_owner');

然后做:

DROP <object type> ext_owner.getroles;

- 或者

ALTER SCHEMA <some other schema> TRANSFER ext_owner.getroles;

你可能不得不重复这一点很多次。您不能删除不为空的架构。

于 2009-12-18T17:02:44.550 回答
2

您可以查询系统表sys.objects以尝试查找有关可能是什么的更多信息。

尝试

SELECT * FROM sys.objects WHERE name LIKE '%getroles%'

这应该为您提供有关对象是什么的一些信息。此时,您可以删除它或决定更改架构以使其不再被引用。

于 2009-12-18T17:01:18.607 回答
2

尝试使用:

SELECT * FROM sys.objects WHERE name = 'getroles'

我的猜测是,它是用户在他们自己的模式下创建的函数或存储过程(可能是偶然的。删除它(如果它没有被使用),你应该很高兴。

于 2009-12-18T17:02:39.353 回答