sql >> Databasteknik >  >> RDS >> Sqlserver

Använd OBJECTPROPERTY() för att ta reda på om ett objekt är en CHECK-begränsning i SQL Server

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.


  1. Ett användningsfall för sp_prepare / sp_prepexec

  2. Återställning av SQL Server 2017

  3. SQL-kommaseparerad rad med Group By-sats

  4. Hur använder man parametrar i en "where value in..."-sats?