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

Find ud af, om et objekt er en fremmednøgle med OBJECTPROPERTY() i SQL Server

Du kan bruge OBJECTPROPERTY() funktion i SQL Server for at finde ud af, om et objekt er en fremmednøgle eller ej.

For at finde ud af, om et objekt er en fremmednøgle, skal du sende objekt-id'et som det første argument og IsForeignKey som det andet argument. Funktionen returnerer en 1 eller en 0 afhængigt af, om det er en fremmednøgle eller ej.

En returværdi på 1 betyder, at det er en fremmednøgle 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 Music;
SELECT OBJECTPROPERTY(981578535, 'IsForeignKey') AS [IsForeignKey];

Resultat:

+----------------+
| IsForeignKey   |
|----------------|
| 1              |
+----------------+

I dette tilfælde er Musik databasen har et objekt med det angivne ID, og ​​det er en fremmednøgle.

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

Resultat:

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

Resultat:

+-------------+----------------+
| Object ID   | IsForeignKey   |
|-------------+----------------|
| 981578535   | 1              |
+-------------+----------------+

Eksempel 3 – Når objektet IKKE er en fremmednøgle

Her er, hvad der sker, når objektet ikke er en fremmednøgle.

SELECT OBJECTPROPERTY(1525580473, 'IsForeignKey') AS [IsForeignKey];

Resultat:

+----------------+
| IsForeignKey   |
|----------------|
| 0              |
+----------------+

I dette tilfælde gør det databasen faktisk har et objekt med det ID, men objektet er faktisk en visning, så jeg får et negativt resultat.

Her bruger den igen OBJECT_ID() .

SELECT 
  OBJECT_ID('RockAlbums') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsForeignKey') AS [IsForeignKey],
  OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsView') AS [IsView];

Resultat:

+-------------+----------------+----------+
| Object ID   | IsForeignKey   | IsView   |
|-------------+----------------+----------|
| 1525580473  | 0              | 1        |
+-------------+----------------+----------+

I dette tilfælde har jeg også tjekket, om objektet er en visning, og resultatet er positivt.

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('InvalidObject'), 'IsForeignKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsForeignKey') 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.


  1. Konverter rækker til kolonner ved hjælp af 'Pivot' i SQL Server

  2. Sådan forbinder du mySQL-database ved hjælp af C++

  3. Patchhistoriktabeller i Oracle Apps (11i/R12.1/R12.2)

  4. Forståelse af Always ON Availability Group mellem Linux-baserede SQL Server-instanser. Del 1