object_id () vs sys.objects
-
18-09-2019 - |
Frage
Ich benutze Datenbank-Skripte, wo ich für die Existenz einer gespeicherten Prozedur überprüfen dann legen Sie es dann erstellen.
Welche der folgenden wäre effizienter für die Überprüfung und Ablegen SPs
Option 1
IF EXISTS(SELECT * FROM sys.objects WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[myStoredProc]',N'P'))
DROP PROCEDURE dbo.myStoredProc;
Option 2
IF OBJECT_ID (N'dbo. myStoredProc',N'P') IS NOT NULL
DROP PROCEDURE dbo.myStoredProc;
Ich habe beschlossen, die zweite verwenden wegen offensichtlichen Gründen, gibt es keinen Grund, warum ich für die erste Option gehen sollte
Lösung
Nein, es gibt keine zwingenden Gründe sys.objects direkt zu verwenden. Wie in der Tat, wird die Verwendung dieser sys Ansichten entmutigt - also, wenn Sie es vermeiden können, tun so
!Stattdessen INFORMATION_SCHEMA Schema Ansichten sollen verwendet werden, wo möglich - (. Eher als eine Microsoft-spezifische Art und Weise der sys der Verwendung * Ansichten). Dies ist ein Standard-SQL-92-Mechanismen für die Metadaten über den Server Belichtung
Marc
Andere Tipps
Die Flut hat sich geändert. Aktuelle Politik von MSDN ist, dass sys.objects sollte statt INFORMATION_SCHEMA Ansichten verwendet werden, da die sys Ansichten mehr Informationen als die letzteren haben.