2009-12-18 7 views
5

J'essaie de supprimer le schéma d'un utilisateur à partir d'une base de données et j'obtiens l'erreur suivante:erreur en essayant de supprimer le schéma du compte utilisateur de base de données

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

Quel est le getroles objet? Comment puis-je me débarrasser de la référence afin de pouvoir supprimer l'ancien compte d'utilisateur?

+0

Quelle est la commande à l'origine de cette erreur? De plus, chaque utilisateur a son propre schéma ?! Sûrement je me méprends. –

+0

J'essaye de supprimer l'utilisateur et pour faire cela il me demande si je veux également supprimer le schéma. Tout ce que je fais pour obtenir ceci est un clic droit sur l'utilisateur, cliquez sur supprimer. – Jason

+1

Vous devriez vous familiariser avec les commandes DDL utilisées pour traiter de telles opérations. Tout ce que l'interface graphique fait est de cacher cette information de vous, et rend plus difficile pour vous de déchiffrer ce qui ne va pas. La plupart des dialogues dans SSMS vous permettront de cliquer sur un bouton de script en haut, et c'est un moyen rapide d'apprendre le DDL pour des choses sur lesquelles vous pourriez normalement compter sur l'interface graphique (et devrait donner plus d'informations sur ce qui se passe messages d'erreur). –

Répondre

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

Ensuite, faites:

DROP <object type> ext_owner.getroles; 

--ou

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

Vous devrez probablement répéter cela un tas de fois. Vous ne pouvez pas supprimer un schéma qui n'est pas vide.

+0

Rien n'apparaît lorsque j'exécute le commentaire. Je ne peux pas supprimer le schéma 'bob222' car il est référencé par l'objet 'LanguagePackImport' –

2

Vous pouvez interroger le system table sys.objects pour essayer de trouver plus d'informations sur ce que les getroles pourraient être.

Essayez

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

Cela devrait vous donner quelques informations sur ce que l'objet est. À ce stade, vous pouvez le supprimer ou décider de modifier le schéma afin qu'il ne soit plus référencé.

2

Essayez d'utiliser:

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

Je pense qu'il est une fonction ou une procédure stockée qui créées par l'utilisateur sous leur propre schéma (peut-être accidentellement Laisse tomber (si ce n'est pas utilisé) et vous devriez être. . bon pour aller

Questions connexes