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をクエリして、getrolesが何であるかに関する詳細情報を見つけることができます。

試す

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 に答える