sql >> Databasteknik >  >> RDS >> Sqlserver

Kontrollera om en tabell har en främmande nyckel i SQL Server med OBJECTPROPERTY()

Du kan använda OBJECTPROPERTY() funktion i SQL Server för att kontrollera om en tabell har en eller flera begränsningar för främmande nyckel.

För att göra detta, skicka tabellens objekt-ID som det första argumentet och TableHasForeignKey som det andra argumentet. Funktionen returnerar en 1 eller en 0 beroende på om den har en främmande nyckel-begränsning eller inte.

Ett returvärde på 1 betyder att tabellen gör har en främmande nyckel-begränsning och ett värde på 0 betyder att det inte gör det. Ett returvärde på 1 gäller oavsett hur många främmande nycklar tabellen har (så länge den har minst en).

Om du vill ha en faktisk lista över främmande nycklar, se Lista alla främmande nycklar på en tabell i SQL Server.

Exempel 1 – Grundläggande användning

Här är ett snabbt exempel att visa.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1493580359, 'TableHasForeignKey') AS [TableHasForeignKey];

Resultat:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| 1                    |
+----------------------+

I det här fallet, WideWorldImportersDW databasen har en tabell med det angivna ID, och den har en främmande nyckel-begränsning.

Exempel 2 – Hämta objekt-ID

Om du känner till tabellens 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('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];

Resultat:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| 1                    |
+----------------------+

Detta är samma objekt från föregående exempel.

Här är den igen med ID-utgången separat.

SELECT 
  OBJECT_ID('Fact.Order') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];

Resultat:

+-------------+----------------------+
| Object ID   | TableHasForeignKey   |
|-------------+----------------------|
| 1493580359  | 1                    |
+-------------+----------------------+

Exempel 3 – När tabellen INTE har en främmande nyckel

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

SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignKey') AS [TableHasForeignKey];

Resultat:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| 0                    |
+----------------------+

I det här fallet är objektet en tabell, det är bara det att det inte har en främmande nyckel.

Exempel 4 – När objektet inte är en tabell

Det här är vad som händer när databasen innehåller ett objekt med ID, men det objektet inte är en tabell.

SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignKey') AS [TableHasForeignKey];

Resultat:

+----------------------+
| TableHasForeignKey   |
|----------------------|
| NULL                 |
+----------------------+

Exempel 5 – 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'), 'TableHasForeignKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignKey') 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. Får du veckonummer av ett datum i MS SQL Server 2005?

  2. Tillåt alla fjärranslutningar, MySQL

  3. Hur man skapar utländsk nyckelbegränsning med PÅ UPPDATERING CASCADE i SQL Server - SQL Server / TSQL Handledning Del 79

  4. MariaDB JSON_DETAILED() Förklarad