OBJECTPROPERTY()
funktion i SQL Server giver dig mulighed for at kontrollere et objekt for en bestemt egenskab.
Du kan bruge denne funktion til at kontrollere, om et objekt er en systemtabel eller ej. For at gøre dette skal du sende objekt-id'et som det første argument og IsSystemTable
som det andet argument. Funktionen returnerer en 1
eller en 0
afhængigt af om det er en systemtabel (1
betyder, at det er en systemtabel og 0
betyder, at det ikke er det).
Eksempel 1 – Grundlæggende brug
Her er et hurtigt eksempel at demonstrere.
SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];
Resultat:
+-----------------+ | IsSystemTable | |-----------------| | 1 | +-----------------+
I dette tilfælde er objektet er en systemtabel.
Eksempel 2 – Objekt er IKKE en systemtabel
Her er, hvad der sker, når objektet ikke er en systemtabel.
SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];
Resultat:
+-----------------+ | IsSystemTable | |-----------------| | 0 | +-----------------+
I dette tilfælde gør det databasen faktisk har et objekt med det ID, men objektet er faktisk en brugerdefineret tabel, så jeg får et negativt resultat.
Her bruger den igen OBJECT_ID()
for at hente ID'et fra objektets navn.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Resultat:
+-------------+-----------------+---------------+ | Object ID | IsSystemTable | IsUserTable | |-------------+-----------------+---------------| | 1013578649 | 0 | 1 | +-------------+-----------------+---------------+
Jeg tjekkede også for at se, om objektet er en brugerdefineret tabel, og resultatet er positivt.
Eksempel 3 – 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('InvalidObject'), 'IsSystemTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsSystemTable') AS [12345678];
Resultat:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
I dette tilfælde indeholder databasen ingen objekter med det navn eller ID, og så får jeg et NULL resultat.
Du får også NULL ved fejl, eller hvis du ikke har tilladelse til at se objektet.