I SQL Server kan du använda OBJECTPROPERTY()
funktion för att ta reda på om ett objekt är en CHECK
begränsning.
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 IsCheckCnst
som den andra, och funktionen returnerar antingen en 1
eller en 0
beroende på om det är en CHECK
eller inte begränsning.
Ett returvärde på 1
betyder att det är en CHECK
begränsning och värdet 0
betyder att det inte är det.
Exempel 1 – Kontrollera en CHECK-begränsning
Här är ett snabbt exempel att visa.
USE Test; SELECT OBJECTPROPERTY(178099675, 'IsCheckCnst') AS [IsCheckCnst];
Resultat:
+---------------+ | IsCheckCnst | |---------------| | 1 | +---------------+
I det här fallet, Test databasen har ett objekt med det angivna ID, och det är faktiskt en CHECK
begränsning.
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('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];
Resultat:
+---------------+ | IsCheckCnst | |---------------| | 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('chkEndDate') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];
Resultat:
+-------------+---------------+ | Object ID | IsCheckCnst | |-------------+---------------| | 178099675 | 1 | +-------------+---------------+
Exempel 3 – Kontrollera en tabell (dvs INTE en KONTROLL-begränsning)
Här är vad som händer när objektet inte är en CHECK
begränsning.
SELECT OBJECTPROPERTY(18099105, 'IsCheckCnst') AS [IsCheckCnst];
Resultat:
+---------------+ | IsCheckCnst | |---------------| | 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('Individual') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Individual'), 'IsCheckCnst') AS [IsCheckCnst];
Resultat:
+-------------+---------------+ | Object ID | IsCheckCnst | |-------------+---------------| | 18099105 | 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'), 'IsCheckCnst') AS [NonExistentObject], OBJECTPROPERTY(11111111, 'IsCheckCnst') AS [11111111];
Resultat:
+---------------------+------------+ | NonExistentObject | 11111111 | |---------------------+------------| | NULL | NULL | +---------------------+------------+
I det här fallet innehåller databasen inga objekt med det namnet eller ID.