2016-07-11 3 views
0

La semaine dernière, dans le cadre d'une exigence, j'ai écrit un script pour générer une définition d'objet pour tous les objets de base de données. Pendant le test, j'ai trouvé que pour quelques procédures stockées, [nom_objet.sys] ne correspondait pas au nom dans la définition d'objet réelle (comme renvoyé par OBJECT_DEFINITION (Object_ID)). C'était très étrange et je l'ai vu la première fois dans la vie. En pensant à ce qui pourrait être la raison de la même, j'ai trouvé que cela se produit lorsque nous renommons la procédure stockée de l'Explorateur d'objets (View -> Object Explorer dans le studio SQL Server Management).La colonne sys.objects [nom] n'est pas compatible avec le nom d'objet dans la définition (nom de procédure stockée)

Je me demande simplement s'il existe un moyen de récupérer le nom réel de l'objet (dans ce cas, le nom du SP)?

+0

s'il vous plaît poster la requête que vous avez utilisé et les différences réelles que vous voyez – TheGameiswar

+0

C'est simple requête. SELECT OBJECT_DEFINITION (ID_objet), [nom] FROM sys.objects où nom = '{nom de l'objet}' –

Répondre

0

J'avais une situation similaire, où une procédure stockée avait été renommée en utilisant sp_rename. Le nouveau nom utilisé était itératif, avec une extension de * _1. Si le nom d'origine était 'MyProcedure', le nouveau nom aurait été 'MyProcedure_1'. 'MyProcedure' représentait le code de production. 'MyProcedure_1' représentait un code qui avait été un code de production à la fois, mais qui était maintenant obsolète. En effet, MyProcedure_1 a référencé des objets qui n'étaient plus présents dans la base de données.

En regardant le nom dans sys.objects, le nouveau nom avec l'extension était là ('MyProcedure_1'), mais la définition d'objet renvoyait l'ancien nom ('MyProcedure'), mais avec le code pour 'MyProcedure_1'.

Cela a été découvert via un appel à 'MyProcedure', qui a fait une erreur, en raison des objets manquants.

La solution consistait à DROP 'MyProcedure_1', qui supprimait effectivement l'object_id et l'object_definition erronée, et le reCREATE. Bien sûr, nous devions aborder les objets manquants. Et - nous avons mis en garde contre l'utilisation de sp_rename pour les objets autres que les tables/colonnes.