sql >> Database >  >> RDS >> Sqlserver

Controleer of een tabel een externe sleutel heeft in SQL Server met OBJECTPROPERTY()

U kunt de OBJECTPROPERTY() . gebruiken functie in SQL Server om te controleren of een tabel een of meer externe sleutelbeperkingen heeft.

Om dit te doen, geeft u de object-ID van de tabel door als het eerste argument en TableHasForeignKey als tweede argument. De functie retourneert een 1 of een 0 afhankelijk van het al dan niet hebben van een externe sleutelbeperking.

Een retourwaarde van 1 betekent dat de tabel doet een externe sleutelbeperking hebben en een waarde van 0 betekent dat niet. Een retourwaarde van 1 is van toepassing ongeacht hoeveel buitenlandse sleutels de tabel heeft (zolang deze er minstens één heeft).

Als u een actuele lijst van de externe sleutels wilt, raadpleegt u Alle buitenlandse sleutels op een tabel in SQL Server weergeven.

Voorbeeld 1 – Basisgebruik

Hier is een snel voorbeeld om te demonstreren.

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

Resultaat:

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

In dit geval is de WideWorldImportersDW database heeft een tabel met de opgegeven ID en er is een externe sleutelbeperking.

Voorbeeld 2 – De object-ID verkrijgen

Als u de naam van de tabel weet, maar niet de ID, kunt u de OBJECT_ID() gebruiken functie om de ID op basis van zijn naam op te halen.

Voorbeeld:

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

Resultaat:

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

Dit is hetzelfde object uit het vorige voorbeeld.

Hier is het weer met de ID-uitvoer afzonderlijk.

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

Resultaat:

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

Voorbeeld 3 – Wanneer de tabel GEEN externe sleutel heeft

Dit is wat er gebeurt als de tabel geen externe sleutel heeft.

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

Resultaat:

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

In dit geval is het object een tabel, alleen heeft het geen externe sleutel.

Voorbeeld 4 – Wanneer het object geen tafel is

Dit is wat er gebeurt als de database wel een object met de ID bevat, maar dat object geen tabel is.

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

Resultaat:

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

Voorbeeld 5 – Object bestaat niet

SQL Server gaat ervan uit dat de object-ID zich in de huidige databasecontext bevindt. Als u een object-ID uit een andere database doorgeeft, krijgt u ofwel een NULL-resultaat of krijgt u onjuiste resultaten.

SELECT 
  OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignKey') AS [12345678];

Resultaat:

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

In dit geval bevat de database geen objecten met die naam of ID, en dus krijg ik een NULL-resultaat.

Je krijgt ook NULL bij een fout of als je geen toestemming hebt om het object te bekijken.


  1. Omzeilen van fouten die niet overeenkomen met architectuur bij gebruik van Microsoft Access

  2. MySQL-database importeren in een MS SQL Server

  3. UNIX_TIMESTAMP in SQL Server

  4. Hoe een bestand in de MySQL-database invoegen?