sql >> Database >  >> RDS >> Sqlserver

Controleer of een tabel wordt verwezen door een externe sleutel in SQL Server met OBJECTPROPERTY()

U kunt de OBJECTPROPERTY() . gebruiken functie in SQL Server om te controleren of naar een tabel wordt verwezen door een externe sleutel.

Om dit te doen, geeft u de object-ID van de tabel door als het eerste argument en TableHasForeignRef als tweede argument. De functie retourneert een 1 of een 0 afhankelijk van of er al dan niet naar wordt verwezen door een externe sleutel.

Een retourwaarde van 1 betekent dat de tabel is waarnaar wordt verwezen door een externe sleutel en een waarde van 0 betekent dat dat niet zo is.

Merk op dat de hier gepresenteerde voorbeelden niet de externe sleutels of hun tabellen of iets dergelijks vermelden. Ze retourneren eenvoudigweg een waar/onwaar-waarde die u kunt gebruiken om te testen of er naar een tabel wordt verwezen door een externe sleutel. Als u alle externe sleutels die naar een bepaalde tabel verwijzen, wilt weergeven, raadpleegt u Alle externe sleutels retourneren die verwijzen naar een bepaalde tabel in SQL Server. De voorbeelden in dat artikel geven een overzicht van elke refererende sleutel, evenals de refererende-sleuteltabel(len) en de primaire-sleuteltabel.

Voorbeeld 1 – Basisgebruik

Hier is een snel voorbeeld om te demonstreren.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];

Resultaat:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

In dit geval is de WideWorldImportersDW database heeft een tabel met de opgegeven ID, en er wordt naar verwezen door een externe sleutel.

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('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultaat:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 1                    |
+----------------------+

Dit is hetzelfde object uit het vorige voorbeeld.

Hier is het weer met de ID-uitvoer afzonderlijk.

SELECT 
  OBJECT_ID('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultaat:

+-------------+----------------------+
| Object ID   | TableHasForeignRef   |
|-------------+----------------------|
| 1013578649  | 1                    |
+-------------+----------------------+

Voorbeeld 3 – Wanneer er NIET naar de tabel wordt verwezen door een externe sleutel

Dit is wat er gebeurt als er niet naar de tabel wordt verwezen door een externe sleutel.

SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultaat:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 0                    |
+----------------------+

In dit geval is het object een tabel, alleen wordt er niet naar verwezen door een 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'), 'TableHasForeignRef') AS [TableHasForeignRef];

Resultaat:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 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'), 'TableHasForeignRef') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignRef') 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. Hoe OCTET_LENGTH() werkt in MariaDB

  2. Voeg een samenvattingsrij toe met totalen

  3. Entiteitsframework erg traag om voor de eerste keer te laden na elke compilatie

  4. Een database-e-mailprofiel bijwerken in SQL Server (T-SQL)