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

Brug OBJECTPROPERTY() til at finde ud af, om et objekt er en CHECK-begrænsning i SQL Server

I SQL Server kan du bruge OBJECTPROPERTY() funktion til at finde ud af, om et objekt er en CHECK begrænsning.

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

Derfor kan du sende objekt-id'et som det første argument og IsCheckCnst som den anden, og funktionen returnerer enten en 1 eller en 0 afhængigt af om det er en CHECK begrænsning.

En returværdi på 1 betyder, at det er en CHECK begrænsning og en værdi på 0 betyder, at det ikke er det.

Eksempel 1 – Kontrol af en CHECK-begrænsning

Her er et hurtigt eksempel at demonstrere.

USE Test;
SELECT OBJECTPROPERTY(178099675, 'IsCheckCnst') AS [IsCheckCnst];

Resultat:

+---------------+
| IsCheckCnst   |
|---------------|
| 1             |
+---------------+

I dette tilfælde er Test databasen har et objekt med det angivne ID, og ​​det er faktisk en CHECK begrænsning.

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('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Resultat:

+---------------+
| IsCheckCnst   |
|---------------|
| 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('chkEndDate') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Resultat:

+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 178099675   | 1             |
+-------------+---------------+

Eksempel 3 – Kontrol af en tabel (dvs. IKKE en KONTROL-begrænsning)

Her er, hvad der sker, når objektet ikke er en CHECK begrænsning.

SELECT OBJECTPROPERTY(18099105, 'IsCheckCnst') AS [IsCheckCnst];

Resultat:

+---------------+
| IsCheckCnst   |
|---------------|
| 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('Individual') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Individual'), 'IsCheckCnst') AS [IsCheckCnst];

Resultat:

+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 18099105    | 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'), 'IsCheckCnst') AS [NonExistentObject],
  OBJECTPROPERTY(11111111, 'IsCheckCnst') AS [11111111];

Resultat:

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

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


  1. "Er det hemmeligt? Er det sikkert?" Håndtering af følsomme data i din datamodellering

  2. Funktion i SQL Server 2008, der ligner STØRST i mysql?

  3. Opdater en materialiseret visning automatisk ved hjælp af en regel eller notifikation

  4. Kan ikke forbinde PostgreSQL til fjerndatabasen ved hjælp af pgAdmin