我正在尝试从数据库中删除用户的架构,我收到以下错误:
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对象?
如何删除引用,以便删除旧用户帐户?
答案 0 :(得分: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;
你可能不得不重复这一次。您不能删除非空的架构。
答案 1 :(得分:2)
您可以查询system table sys.objects
以尝试查找有关getroles可能的更多信息。
尝试
SELECT * FROM sys.objects WHERE name LIKE '%getroles%'
这应该会为您提供有关对象的信息。此时,您可以删除它或决定更改架构,以便不再引用它。
答案 2 :(得分:2)
尝试使用:
SELECT * FROM sys.objects WHERE name = 'getroles'
我的猜测是,这是一个用户在自己的架构下创建的函数或存储过程(可能是意外的。丢弃它(如果它没有被使用),你应该好好去。