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.