sql >> Databasteknik >  >> RDS >> Sqlserver

Ta reda på om ett objekt är en främmande nyckel med OBJECTPROPERTY() i SQL Server

Du kan använda OBJECTPROPERTY() funktion i SQL Server för att ta reda på om ett objekt är en främmande nyckel eller inte.

För att ta reda på om ett objekt är en främmande nyckel, skicka objekt-ID som första argument och IsForeignKey som det andra argumentet. Funktionen returnerar en 1 eller en 0 beroende på om det är en främmande nyckel eller inte.

Ett returvärde på 1 betyder att det är en främmande nyckel och värdet 0 betyder att det inte är det.

Exempel 1 – Grundläggande användning

Här är ett snabbt exempel att visa.

USE Music;
SELECT OBJECTPROPERTY(981578535, 'IsForeignKey') AS [IsForeignKey];

Resultat:

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

I det här fallet, Musik databasen har ett objekt med det angivna ID, och det är en främmande nyckel.

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

Resultat:

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

Resultat:

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

Exempel 3 – När objektet INTE är en främmande nyckel

Här är vad som händer när objektet inte är en främmande nyckel.

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

Resultat:

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

I det här fallet gör det databasen faktiskt har ett objekt med det ID:t, men objektet är faktiskt en vy, så jag får ett negativt resultat.

Här använder den återigen 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 det här fallet kontrollerade jag också om objektet är en vy, och resultatet är positivt.

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

Resultat:

+-----------------+------------+
| InvalidObject   | 12345678   |
|-----------------+------------|
| NULL            | NULL       |
+-----------------+------------+

I det här fallet innehåller databasen inga objekt med det namnet eller ID, så jag får ett NULL-resultat.

Du får också NULL vid fel eller om du inte har behörighet att visa objektet.


  1. Återställ dump på fjärrmaskinen

  2. Hur LÅT SOM fungerar i MariaDB

  3. SQL Server AlwaysOn Availability Groups:Installation och konfiguration, del 1

  4. Matcha utbud med efterfrågan – lösningar, del 2