sql >> Database teknologi >  >> RDS >> Sqlserver

Tjek, om et objekt er en primær nøgle med OBJECTPROPERTY() i SQL Server

Du kan bruge OBJECTPROPERTY() funktion i SQL Server for at kontrollere, om et objekt er en primær nøgle eller ej.

For at finde ud af, om et objekt er en primær nøgle, skal du sende objekt-id'et som det første argument og IsPrimaryKey som det andet argument. Funktionen returnerer en 1 eller en 0 afhængigt af, om det er en primær nøgle eller ej.

En returværdi på 1 betyder, at det er en primær nøgle og en værdi på 0 betyder, at det ikke er det.

Eksempel 1 – Grundlæggende brug

Her er et hurtigt eksempel at demonstrere.

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

Resultat:

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

I dette tilfælde, PK_Test databasen har et objekt med det angivne id, og det er en primær nøgle.

Eksempel 2 – Hentning af objekt-id'et

Hvis du kender objektets navn, men ikke dets ID, kan du bruge OBJECT_ID() funktion for at hente ID'et baseret på dets navn.

Eksempel:

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

Resultat:

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

I dette tilfælde kontrollerede jeg det samme objekt fra det forrige eksempel.

Her er den igen med ID-udgangen separat.

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

Resultat:

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

Eksempel 3 – Når objektet IKKE er en primær nøgle

Her er, hvad der sker, når objektet ikke er en primær nøgle.

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

Resultat:

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

I dette tilfælde gør det databasen faktisk har et objekt med det ID, men objektet er faktisk en tabel, så jeg får et negativt resultat.

Her bruger den igen 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         |
+-------------+----------------+-----------+

Jeg har også tjekket, om objektet er en tabel, og resultatet er positivt.

Eksempel 4 – Objekt eksisterer ikke

SQL Server antager, at objekt-id'et er i den aktuelle databasekontekst. Hvis du sender et objekt-id fra en anden database, får du enten et NULL-resultat, eller du får forkerte resultater.

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

Resultat:

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

I dette tilfælde indeholder databasen ingen objekter med det navn eller ID, og ​​så får jeg et NULL-resultat.

Du får også NULL ved fejl, eller hvis du ikke har tilladelse til at se objektet.


  1. Sådan implementeres MariaDB Server til en Docker Container

  2. LOAD DATA LOCAL INFILE giver fejlen Den brugte kommando er ikke tilladt med denne MySQL-version

  3. Begrænsning af returneret post fra SQL-forespørgsel i Oracle

  4. Fejl ORA-00932 ved brug af en select med union og CLOB felter