sql >> Databasteknik >  >> RDS >> Sqlserver

Kontrollera om ett objekt är en primärnyckel med OBJECTPROPERTY() i SQL Server

Du kan använda OBJECTPROPERTY() funktion i SQL Server för att kontrollera om ett objekt är en primärnyckel eller inte.

För att ta reda på om ett objekt är en primärnyckel, skicka objekt-ID som det första argumentet och IsPrimaryKey som det andra argumentet. Funktionen returnerar en 1 eller en 0 beroende på om det är en primärnyckel eller inte.

Ett returvärde på 1 betyder att det är en primärnyckel och värdet 0 betyder att det inte är det.

Exempel 1 – Grundläggande användning

Här är ett snabbt exempel att visa.

USE PK_Test;
SELECT OBJECTPROPERTY(901578250, 'IsPrimaryKey') AS [IsPrimaryKey];

Resultat:

+----------------+
| IsPrimaryKey   |
|----------------|
| 1              |
+----------------+

I det här fallet, PK_Test databasen har ett objekt med det angivna ID, och det är en primärnyckel.

Exempel 2 – Hämta objekt-ID

Om du känner till objektets 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('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];

Resultat:

+----------------+
| IsPrimaryKey   |
|----------------|
| 1              |
+----------------+

I det här fallet kontrollerade jag samma objekt från föregående exempel.

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

SELECT 
  OBJECT_ID('PK_Musician') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];

Resultat:

+-------------+----------------+
| Object ID   | IsPrimaryKey   |
|-------------+----------------|
| 901578250   | 1              |
+-------------+----------------+

Exempel 3 – När objektet INTE är en primärnyckel

Här är vad som händer när objektet inte är en primärnyckel.

SELECT OBJECTPROPERTY(885578193, 'IsPrimaryKey') AS [IsPrimaryKey];

Resultat:

+----------------+
| IsPrimaryKey   |
|----------------|
| 0              |
+----------------+

I det här fallet gör det databasen faktiskt har ett objekt med det ID:t, men objektet är faktiskt en tabell, så jag får ett negativt resultat.

Här använder den återigen OBJECT_ID() .

SELECT 
  OBJECT_ID('Musician') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsPrimaryKey') AS [IsPrimaryKey],
  OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsTable') AS [IsTable];

Resultat:

+-------------+----------------+-----------+
| Object ID   | IsPrimaryKey   | IsTable   |
|-------------+----------------+-----------|
| 885578193   | 0              | 1         |
+-------------+----------------+-----------+

Jag kollade också för att se om objektet är en tabell och resultatet är positivt.

Exempel 4 – 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'), 'IsPrimaryKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsPrimaryKey') 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. Hur man säkrar Galera Cluster - 8 tips

  2. Hur man kontrollerar versionen av Oracle Provider för ole-db. OraOLEDB.Oracle-leverantör

  3. SQLite JSON_QUOTE()

  4. Aritmetiskt spillfel vid konvertering av uttryck till datatyp datetime. (medan datum och tid visas..)