sql >> Database teknologi >  >> RDS >> Sqlserver

Tjek om et objekt er en lagret procedure ved at bruge OBJECTPROPERTY() i SQL Server

I SQL Server kan du bruge OBJECTPROPERTY() funktion til at finde ud af, om et objekt er en lagret procedure.

Denne funktion accepterer to parametre:objekt-id'et og den egenskab, som du tjekker det for.

Derfor kan du videregive objekt-id'et som det første argument og IsProcedure som den anden, og funktionen returnerer enten en 1 eller en 0 afhængig af om det er en lagret procedure eller ej.

En returværdi på 1 betyder, at det er en lagret procedure og en værdi på 0 betyder, at det ikke er det.

Eksempel 1 – Grundlæggende brug

Her er et hurtigt eksempel at demonstrere.

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

Resultat:

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

I dette tilfælde er Musik databasen har et objekt med det angivne ID, og ​​det er faktisk en lagret procedure.

Eksempel 2 – Hentning af objekt-id'et

Hvis du kender objektets navn, men ikke dets ID, kan du bruge OBJECT_ID() funktion for at hente ID'et baseret på dets navn.

Eksempel:

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

Resultat:

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

I dette tilfælde kontrollerede jeg det samme objekt fra det forrige eksempel.

Her er den igen med ID-udgangen separat.

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

Resultat:

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

Eksempel 3 – Når objektet IKKE er en lagret procedure

Her er, hvad der sker, når objektet ikke er en lagret procedure.

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

Resultat:

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

I dette tilfælde gør det databasen faktisk har et objekt med det ID, men objektet er faktisk en tabel, så jeg får et negativt resultat.

Her bruger den igen OBJECT_ID() .

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

Resultat:

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

Eksempel 4 – Objekt eksisterer ikke

SQL Server antager, at objekt-id'et er i den aktuelle databasekontekst. Hvis du sender et objekt-id fra en anden database, får du enten et NULL-resultat, eller du får forkerte resultater.

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

Resultat:

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

I dette tilfælde indeholder databasen ingen objekter med det pågældende navn eller ID.


  1. Schema Management Tips til MySQL &MariaDB

  2. Sådan får du nullbar DateTime ud af databasen

  3. PostgreSQL-kolonnen 'foo' eksisterer ikke

  4. Kassér millisekunddelen fra tidsstemplet