Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Überprüfen Sie, ob ein Objekt eine gespeicherte Prozedur ist, indem Sie OBJECTPROPERTY() in SQL Server verwenden

In SQL Server können Sie das OBJECTPROPERTY() verwenden Funktion, um herauszufinden, ob ein Objekt eine gespeicherte Prozedur ist oder nicht.

Diese Funktion akzeptiert zwei Parameter:die Objekt-ID und die Eigenschaft, nach der Sie suchen.

Daher können Sie die Objekt-ID als erstes Argument und IsProcedure übergeben als zweites, und die Funktion gibt entweder einen 1 zurück oder eine 0 abhängig davon, ob es sich um eine gespeicherte Prozedur handelt oder nicht.

Ein Rückgabewert von 1 bedeutet, dass es ist eine gespeicherte Prozedur und einen Wert von 0 bedeutet, dass dies nicht der Fall ist.

Beispiel 1 – Grundlegende Verwendung

Hier ist ein kurzes Beispiel zur Veranschaulichung.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(466100701, 'IsProcedure') AS [IsProcedure];

Ergebnis:

+---------------+
| IsProcedure   |
|---------------|
| 1             |
+---------------+

In diesem Fall die Musik Die Datenbank hat ein Objekt mit der bereitgestellten ID und ist tatsächlich eine gespeicherte Prozedur.

Beispiel 2 – Abrufen der Objekt-ID

Wenn Sie den Namen des Objekts kennen, aber nicht seine ID, können Sie die OBJECT_ID() verwenden Funktion zum Abrufen der ID basierend auf ihrem Namen.

Beispiel:

SELECT OBJECTPROPERTY(OBJECT_ID('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];

Ergebnis:

+---------------+
| IsProcedure   |
|---------------|
| 1             |
+---------------+

In diesem Fall habe ich dasselbe Objekt aus dem vorherigen Beispiel überprüft.

Hier wird nochmal mit der ID getrennt ausgegeben.

SELECT 
  OBJECT_ID('Integration.GetLineageKey') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Integration.GetLineageKey'), 'IsProcedure') AS [IsProcedure];

Ergebnis:

+-------------+---------------+
| Object ID   | IsProcedure   |
|-------------+---------------|
| 466100701   | 1             |
+-------------+---------------+

Beispiel 3 – Wenn das Objekt KEINE gespeicherte Prozedur ist

Folgendes passiert, wenn das Objekt keine gespeicherte Prozedur ist.

SELECT OBJECTPROPERTY(1013578649, 'IsProcedure') AS [IsProcedure];

Ergebnis:

+---------------+
| IsProcedure   |
|---------------|
| 0             |
+---------------+

In diesem Fall macht es die Datenbank habe tatsächlich ein Objekt mit dieser ID, aber das Objekt ist eigentlich eine Tabelle, also erhalte ich ein negatives Ergebnis.

Hier wird wieder OBJECT_ID() verwendet .

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsProcedure') AS [IsProcedure];

Ergebnis:

+-------------+---------------+
| Object ID   | IsProcedure   |
|-------------+---------------|
| 1013578649  | 0             |
+-------------+---------------+

Beispiel 4 – Objekt existiert nicht

SQL Server geht davon aus, dass sich die Objekt-ID im aktuellen Datenbankkontext befindet. Wenn Sie eine Objekt-ID aus einer anderen Datenbank übergeben, erhalten Sie entweder ein NULL-Ergebnis oder falsche Ergebnisse.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('NonExistentObject'), 'IsProcedure') AS [NonExistentObject],
  OBJECTPROPERTY(11111111, 'IsProcedure') AS [11111111];

Ergebnis:

+---------------------+------------+
| NonExistentObject   | 11111111   |
|---------------------+------------|
| NULL                | NULL       |
+---------------------+------------+

In diesem Fall enthält die Datenbank keine Objekte mit diesem Namen oder dieser ID.