Ошибка при попытке удалить схему учетной записи пользователя базы данных - PullRequest
5 голосов
/ 18 декабря 2009

Я пытаюсь удалить схему пользователя из базы данных и получаю следующую ошибку:

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?

Как мне избавиться от ссылки, чтобы я мог удалить старую учетную запись пользователя?

Ответы [ 3 ]

7 голосов
/ 18 декабря 2009
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;

Вам, вероятно, придется повторить это несколько раз. Вы не можете удалить схему, которая не является пустой.

2 голосов
/ 18 декабря 2009

Попробуйте использовать:

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

Я предполагаю, что это функция или хранимая процедура, которую этот пользователь создал по своей собственной схеме (возможно, случайно. Отбросьте ее (если она не используется), и вам следует хорошо идти.

2 голосов
/ 18 декабря 2009

Вы можете запросить системную таблицу sys.objects, чтобы попытаться найти дополнительную информацию о том, какими могут быть getroles.

Попробуйте

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

Это должно дать вам некоторую информацию о том, что это за объект. В этот момент вы можете либо удалить его, либо принять решение изменить схему, чтобы на нее больше не ссылались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...