1

SQL Server Management Studio を通じて SQL Server 2008 を使用しています

私はこれを前に見たことがありません:

多くの場合、データベースをリファクタリングするときに、次のように使用して、既存のプロシージャ内の列、テーブル、およびその他のプロシージャへの参照を見つけます。

select *
from sys.sql_modules
where [definition] like '%SomethingImLookingFor%'

これは特別なことではありません。多くのデータベース ヘッドが以前に実行したことがあると思います。

ただし、結果には、作成時に完全に事故であったように見える手順が含まれていることに気付きました (実際に作成された場合)。データベースには という名前のプロシージャがありますChatObject_Remove。これは、 という用語を参照するものを探していたため、クエリに表示されました%Remove%。しかし、私はまた、と呼ばれるゴーストプロシージャを見ますzzChatObject_Remove

SSMS でデータベースを展開すると、 がProgrammability -> Stored Procedures表示されますが、 は表示さChatObject_RemoveれませんzzChatObject_Remove

このグループを更新してみましたが、ゴーストはまだ表示されません。

ステートメントを使用してみました

drop procedure [dbo].[zzChatObject_Remove]

存在しないか、権限がないというエラーが返されました。

というプロシージャを作成しようとしましたが、それを実行できました (ただし、 の定義を持つzzChatObject_Remove2 つのオブジェクトがありました)。次に、許可された新しいものを削除しましたが、予想どおり、ゴーストはまだモジュールテーブルにあり、触れることができません。sql_modulescreate procedure zzChatObject_Remove ...

誰もこれを見たことがありますか?これは他にどこにありますか?それは害を及ぼす可能性がありますか?sys.sql_modulesテーブル内のこの一見孤立したプロシージャを取り除くにはどうすればよいですか?

ご意見をお寄せいただきありがとうございます。

運が良かっただけに、ハロウィーンの時期に幽霊を見ました...

4

1 に答える 1

0

これを試して、どこに表示されるかを確認してください。

exec sp_MSforeachdb '
    select ''?'' [db]
    , s.name [schema]
    , o.name [object]
    , o.type_desc 
    from [?].sys.objects o 
    inner join sys.schemas s 
        on s.schema_id = o.schema_id 
    where o.name = ''zzChatObject_Remove''
'

または、次のようにします。

select *
from sys.sql_modules sm
inner join sys.objects o 
    on o.object_id = sm.object_id
inner join sys.schemas s 
    on s.schema_id = o.schema_id 
where sm.description like '%zzChatObject_Remove%'

また、確認するために、このプロシージャは sql_modules で定義されていますか、それとも別のプロシージャのコードで参照されているために表示されていますか?

于 2013-10-30T21:46:38.210 に答える