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

Find ud af, om et objekt er en brugerdefineret tabel i SQL Server med OBJECTPROPERTY()

Du kan bruge OBJECTPROPERTY() funktion i SQL Server for at kontrollere, om et objekt er en brugerdefineret tabel eller ej.

For at gøre dette skal du sende objekt-id'et som det første argument og IsUserTable som det andet argument. Funktionen returnerer en 1 eller en 0 afhængigt af, om det er en brugerdefineret tabel eller ej.

En returværdi på 1 betyder, at det er en brugerdefineret tabel 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 WideWorldImportersDW;
SELECT OBJECTPROPERTY(1013578649, 'IsUserTable') AS [IsUserTable];

Resultat:

+---------------+
| IsUserTable   |
|---------------|
| 1             |
+---------------+

I dette tilfælde er WideWorldImportersDW databasen har et objekt med det angivne ID, og ​​det er en brugerdefineret tabel.

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('Dimension.City'), 'IsUserTable') AS [IsUserTable];

Resultat:

+---------------+
| IsUserTable   |
|---------------|
| 1             |
+---------------+

Dette er det samme objekt fra det foregående eksempel.

Her er den igen med ID-udgangen separat.

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

Resultat:

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

Eksempel 3 – Når objektet IKKE er en brugerdefineret tabel

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

SELECT OBJECTPROPERTY(402100473, 'IsUserTable') AS [IsUserTable];

Resultat:

+---------------+
| IsUserTable   |
|---------------|
| 0             |
+---------------+

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

Her bruger den igen OBJECT_ID() .

SELECT 
  OBJECT_ID('Sequences.ReseedAllSequences') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsUserTable') AS [IsUserTable],
  OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'IsProcedure') AS [IsProcedure];

Resultat:

+-------------+---------------+---------------+
| Object ID   | IsUserTable   | IsProcedure   |
|-------------+---------------+---------------|
| 402100473   | 0             | 1             |
+-------------+---------------+---------------+

Jeg tjekkede også for at se, om objektet er en lagret procedure, 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'), 'IsUserTable') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsUserTable') 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. MySQL:Vælg tilfældig indtastning, men vægt mod visse poster

  2. NULL-kompleksiteter – Del 4, Manglende unikke standardbegrænsninger

  3. Inkluder manglende måneder i gruppe efter forespørgsel

  4. MySQL SQRT() Funktion – Returner kvadratroden af ​​et tal i MySQL