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

Brug OBJECTPROPERTY() til at finde ud af, om en tabel er en systemtabel i SQL Server

OBJECTPROPERTY() funktion i SQL Server giver dig mulighed for at kontrollere et objekt for en bestemt egenskab.

Du kan bruge denne funktion til at kontrollere, om et objekt er en systemtabel eller ej. For at gøre dette skal du sende objekt-id'et som det første argument og IsSystemTable som det andet argument. Funktionen returnerer en 1 eller en 0 afhængigt af om det er en systemtabel (1 betyder, at det er en systemtabel og 0 betyder, at det ikke er det).

Eksempel 1 – Grundlæggende brug

Her er et hurtigt eksempel at demonstrere.

SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];

Resultat:

+-----------------+
| IsSystemTable   |
|-----------------|
| 1               |
+-----------------+

I dette tilfælde er objektet er en systemtabel.

Eksempel 2 – Objekt er IKKE en systemtabel

Her er, hvad der sker, når objektet ikke er en systemtabel.

SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];

Resultat:

+-----------------+
| IsSystemTable   |
|-----------------|
| 0               |
+-----------------+

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

Her bruger den igen OBJECT_ID() for at hente ID'et fra objektets navn.

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

Resultat:

+-------------+-----------------+---------------+
| Object ID   | IsSystemTable   | IsUserTable   |
|-------------+-----------------+---------------|
| 1013578649  | 0               | 1             |
+-------------+-----------------+---------------+

Jeg tjekkede også for at se, om objektet er en brugerdefineret tabel, og resultatet er positivt.

Eksempel 3 – 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'), 'IsSystemTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsSystemTable') 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 eksporteres forespørgselsresultater til en CSV-fil i SQL Developer (Oracle)

  2. Fire ting, du ikke vidste om Amazon Aurora

  3. SQLite ingen sådan kolonne

  4. Konverter Datetime-kolonnen fra UTC til lokal tid i select statement