5 votes

Erreur lors de la suppression du schéma de compte d'utilisateur de la base de données

J'essaie de supprimer le schéma d'un utilisateur d'une base de données et j'obtiens l'erreur suivante :

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
------------------------------

Qu'est-ce que l'objet getroles ?

Comment puis-je me débarrasser de la référence pour pouvoir supprimer l'ancien compte d'utilisateur ?

7voto

Aaron Bertrand Points 116343
SELECT * FROM sys.objects 
WHERE name = 'getroles' 
AND schema_id = SCHEMA_ID('ext_owner');

Alors, faites-le :

DROP <object type> ext_owner.getroles;

--ou

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

Vous devrez probablement répéter cette opération plusieurs fois. Vous ne pouvez pas déposer un schéma qui n'est pas vide.

2voto

womp Points 71924

Vous pouvez interroger le tableau du système sys.objects pour essayer de trouver plus d'informations sur ce que pourraient être les getroles.

Essayez

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

Cela devrait vous donner des informations sur la nature de l'objet. À ce stade, vous pouvez soit le laisser tomber, soit décider de modifier le schéma pour qu'il ne soit plus référencé.

2voto

Tom H. Points 23783

Essayez d'utiliser :

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

Je pense qu'il s'agit d'une fonction ou d'une procédure stockée que cet utilisateur a créée sous son propre schéma (peut-être accidentellement). Supprimez-la (si elle n'est pas utilisée) et tout devrait bien se passer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X