Du kan använda OBJECTPROPERTY()
funktion i SQL Server för att kontrollera om en tabell refereras av en främmande nyckel eller inte.
För att göra detta, skicka tabellens objekt-ID som det första argumentet och TableHasForeignRef
som det andra argumentet. Funktionen returnerar en 1
eller en 0
beroende på om den refereras av en främmande nyckel eller inte.
Ett returvärde på 1
betyder att tabellen är refereras av en främmande nyckel och värdet 0
betyder att det inte är det.
Observera att exemplen som presenteras här inte listar främmande nycklar eller deras tabeller eller något liknande. De returnerar helt enkelt ett sant/falskt värde som du kan använda för att testa om en tabell refereras av en främmande nyckel eller inte. Om du behöver lista ut alla främmande nycklar som refererar till en given tabell, se Returnera alla främmande nycklar som refererar till en given tabell i SQL Server. Exemplen i den artikeln listar varje främmande nyckel, såväl som de främmande nyckeltabellerna och den primära nyckeltabellen.
Exempel 1 – Grundläggande användning
Här är ett snabbt exempel att visa.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
I det här fallet, WideWorldImportersDW databasen har en tabell med det angivna ID, och den refereras till av en främmande nyckel.
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('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 1 | +----------------------+
Detta är samma objekt från föregående exempel.
Här är den igen med ID-utgången separat.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+-------------+----------------------+ | Object ID | TableHasForeignRef | |-------------+----------------------| | 1013578649 | 1 | +-------------+----------------------+
Exempel 3 – När tabellen INTE refereras av en främmande nyckel
Här är vad som händer när tabellen inte refereras av en främmande nyckel.
SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 0 | +----------------------+
I det här fallet är objektet en tabell, det är bara det att det inte refereras av 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'), 'TableHasForeignRef') AS [TableHasForeignRef];
Resultat:
+----------------------+ | TableHasForeignRef | |----------------------| | 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'), 'TableHasForeignRef') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignRef') 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.