sql >> Databasteknik >  >> RDS >> Sqlserver

Kontrollera om ett objekt är en lagrad procedur genom att använda OBJECTPROPERTY() i SQL Server

I SQL Server kan du använda OBJECTPROPERTY() funktion för att ta reda på om ett objekt är en lagrad procedur eller inte.

Den här funktionen accepterar två parametrar:objekt-ID och egenskapen som du kontrollerar det för.

Därför kan du skicka objekt-ID som det första argumentet och IsProcedure som den andra, och funktionen returnerar antingen en 1 eller en 0 beroende på om det är en lagrad procedur eller inte.

Ett returvärde på 1 betyder att det är en lagrad procedur och värdet 0 betyder att det inte är det.

Exempel 1 – Grundläggande användning

Här är ett snabbt exempel att visa.

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

Resultat:

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

I det här fallet, Musik databasen har ett objekt med det angivna ID, och det är i själva verket en lagrad procedur.

Exempel 2 – Hämta objekt-ID

Om du känner till objektets namn, men inte dess ID, kan du använda OBJECT_ID() funktion för att hämta ID baserat på dess namn.

Exempel:

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

Resultat:

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

I det här fallet kontrollerade jag samma objekt från föregående exempel.

Här är den igen med ID-utgången separat.

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

Resultat:

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

Exempel 3 – När objektet INTE är en lagrad procedur

Här är vad som händer när objektet inte är en lagrad procedur.

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

Resultat:

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

I det här fallet gör det databasen faktiskt har ett objekt med det ID:t, men objektet är faktiskt en tabell, så jag får ett negativt resultat.

Här använder den återigen OBJECT_ID() .

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

Resultat:

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

Exempel 4 – Objekt existerar inte

SQL Server antar att objekt-ID:t finns i den aktuella databaskontexten. Om du skickar in ett objekt-ID från en annan databas får du antingen ett NULL-resultat eller så får du felaktiga resultat.

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

Resultat:

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

I det här fallet innehåller databasen inga objekt med det namnet eller ID.


  1. Simulera SKAPA DATABAS OM INTE FINNS för PostgreSQL?

  2. Anslut till SQL Server via PDO med SQL Server Driver

  3. Vad är det bästa sättet att skapa och fylla i en taltabell?

  4. Kontrollera om kolumnsträngen i databasen är en delsträng till en fråga i sqlite