2016-07-11 13 views
0

先週、1つの要件の一部として、すべてのデータベースオブジェクトのオブジェクト定義を生成するスクリプトを作成しました。sys.objects [name]列が定義内のオブジェクト名と一致しません(ストアドプロシージャ名)

テスト中に、[sys.objects] .nameが(OBJECT_DEFINITION(Object_ID)によって返される)実際のオブジェクト定義で名前と一致しないストアドプロシージャがほとんど見つかりませんでした。それは非常に奇妙で、私は人生で初めてそれを見た。

同じ理由から考えると、ストアドプロシージャをオブジェクトエクスプローラ(SQL Server Management Studioの[表示] - > [オブジェクトエクスプローラ])から名前を変更したときに発生することがわかりました。

実際のオブジェクト名(この場合はSP名)を取得する方法はありますか?

+0

あなたが使ったクエリと実際に見ている違いを投稿してください。 – TheGameiswar

+0

それは簡単なクエリです。 SELECT OBJECT_DEFINITION(Object_ID)、[name] FROM sys.objects name = '{Object name}' –

答えて

0

同様の状況で、ストアドプロシージャの名前がsp_renameを使用して変更されました。使用された新しい名前は反復的で、拡張子は* _1でした。元の名前が「MyProcedure」の場合、新しい名前は「MyProcedure_1」でした。

'MyProcedure'はプロダクションコードを表します。 「MyProcedure_1」は、一度にプロダクションコードであったコードを表していましたが、現在は廃止されました。確かに、 'MyProcedure_1'はデータベースに存在しなくなったオブジェクトを参照していました。

sys.objectsで名前を調べると、拡張子の新しい名前がそこにありましたが( 'MyProcedure_1')、object_definitionは古い名前( 'MyProcedure')を返しましたが、 'MyProcedure_1'のコードを返しました。

これは、欠落しているオブジェクトのためにエラーが発生した「MyProcedure」の呼び出しによって検出されました。

DROP 'MyProcedure_1'は、object_idと誤ったobject_definitionを効果的に削除し、再作成することでした。もちろん、欠落しているオブジェクトに対処する必要がありました。そして、テーブル/カラム以外のオブジェクトにsp_renameを使うことについては注意が必要です。

関連する問題