sql >> Database >  >> RDS >> Sqlserver

Zoek uit of een object een externe sleutel is met OBJECTPROPERTY() in SQL Server

U kunt de OBJECTPROPERTY() . gebruiken functie in SQL Server om erachter te komen of een object al dan niet een externe sleutel is.

Als u wilt weten of een object een externe sleutel is, geeft u de object-ID als eerste argument door en IsForeignKey als tweede argument. De functie retourneert een 1 of een 0 afhankelijk van of het een externe sleutel is.

Een retourwaarde van 1 betekent dat het is een externe sleutel en een waarde van 0 betekent dat dit niet het geval is.

Voorbeeld 1 – Basisgebruik

Hier is een snel voorbeeld om te demonstreren.

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

Resultaat:

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

In dit geval is de Muziek database heeft een object met de opgegeven ID en het is een externe sleutel.

Voorbeeld 2 – De object-ID verkrijgen

Als u de naam van het object 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('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];

Resultaat:

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

In dit geval heb ik hetzelfde object uit het vorige voorbeeld gecontroleerd.

Hier is het weer met de ID-uitvoer afzonderlijk.

SELECT 
  OBJECT_ID('FK_Albums_Artists') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('FK_Albums_Artists'), 'IsForeignKey') AS [IsForeignKey];

Resultaat:

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

Voorbeeld 3 – Wanneer het object GEEN externe sleutel is

Dit is wat er gebeurt als het object geen externe sleutel is.

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

Resultaat:

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

In dit geval doet de database dat wel heb in feite een object met die ID, maar het object is eigenlijk een weergave, dus ik krijg een negatief resultaat.

Hier is het opnieuw met OBJECT_ID() .

SELECT 
  OBJECT_ID('RockAlbums') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsForeignKey') AS [IsForeignKey],
  OBJECTPROPERTY(OBJECT_ID('RockAlbums'), 'IsView') AS [IsView];

Resultaat:

+-------------+----------------+----------+
| Object ID   | IsForeignKey   | IsView   |
|-------------+----------------+----------|
| 1525580473  | 0              | 1        |
+-------------+----------------+----------+

In dit geval heb ik ook gecontroleerd of het object een weergave is, en het resultaat is positief.

Voorbeeld 4 – 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'), 'IsForeignKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsForeignKey') 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. Een lokalisatieklaar systeem ontwerpen

  2. Databaseoplossingen voor constructiebeheer

  3. MySQL 8 instellen vanuit Binary Tarball

  4. Converteer BufferedInputStream naar afbeelding