2016-07-11 10 views
0

Letzte Woche schrieb ich als Teil einer Anforderung ein Skript, um die Objektdefinition für alle Datenbankobjekte zu generieren.Die Spalte sys.objects [name] ist nicht konsistent mit dem Objektnamen in der Definition (Name der gespeicherten Prozedur)

Beim Testen stellte ich fest, dass für einige gespeicherte Prozeduren [sys.objects] .name nicht mit dem Namen in der tatsächlichen Objektdefinition übereinstimmte (wie von OBJECT_DEFINITION (Object_ID) zurückgegeben). Es war sehr seltsam und ich sah es das erste Mal im Leben.

Beim Nachdenken darüber, was der Grund für das gleiche sein könnte, habe ich festgestellt, dass es geschieht, wenn wir gespeicherte Prozeduren aus dem Objekt-Explorer umbenennen (Ansicht -> Objekt-Explorer im SQL Server Management Studio).

Nur wundernd, gibt es eine Möglichkeit, tatsächlichen Objektnamen (in diesem Fall, SP-Name) abrufen?

+0

posten Sie bitte die Abfrage, die Sie verwendet haben, und tatsächliche Unterschiede, die Sie sehen – TheGameiswar

+0

Es ist einfache Abfrage. SELECT OBJECT_DEFINITION (Object_ID), [Name] FROM sys.objects wobei Name = '{Objektname}' –

Antwort

0

Ich hatte eine ähnliche Situation, wo eine gespeicherte Prozedur mit sp_rename umbenannt wurde. Der neue Name wurde iterativ mit einer Erweiterung von * _1 verwendet. Wenn der ursprüngliche Name 'MyProcedure' wäre, wäre der neue Name 'MyProcedure_1'.

'MyProcedure' repräsentiert den Produktionscode. "MyProcedure_1" stellte Code dar, der einmal Produktionscode war, aber jetzt veraltet war. Tatsächlich referenzierte "MyProcedure_1" Objekte, die nicht mehr in der Datenbank vorhanden waren.

Beim Anzeigen des Namens in sys.objects war der neue Name mit der Erweiterung vorhanden ('MyProcedure_1'), aber die object_definition gab den alten Namen ('MyProcedure') zurück, aber mit dem Code für 'MyProcedure_1'.

Dies wurde durch einen Aufruf von 'MyProcedure' entdeckt, der aufgrund der fehlenden Objekte fehlerhaft war.

Die Lösung war DROP 'MyProcedure_1', die effektiv die object_id und die fehlerhafte object_definition entfernt und reCREATE es. Natürlich mussten wir die fehlenden Objekte ansprechen. Und - wir verbreiten Vorsicht bei der Verwendung von sp_rename für andere Objekte als Tabellen/Spalten.