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

Se om en tabel har en DEFAULT Constraint i SQL Server ved hjælp af OBJECTPROPERTY()

Du kan bruge OBJECTPROPERTY() funktion i SQL Server for at se, om en tabel har en DEFAULT-begrænsning eller ej.

For at gøre dette skal du sende tabellens objekt-id som det første argument og TableHasDefaultCnst som det andet argument. Funktionen returnerer en 1 eller en 0 afhængigt af, om den har en DEFAULT-begrænsning eller ej.

En returværdi på 1 betyder, at tabellen har en DEFAULT-begrænsning 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(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Resultat:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 1                     |
+-----------------------+

I dette tilfælde er WideWorldImportersDW databasen har en tabel med det angivne ID, og ​​den har en DEFAULT-begrænsning.

Eksempel 2 – Hentning af objekt-id'et

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

Eksempel:

SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Resultat:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 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'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Resultat:

+-------------+-----------------------+
| Object ID   | TableHasDefaultCnst   |
|-------------+-----------------------|
| 1013578649  | 1                     |
+-------------+-----------------------+

Eksempel 3 – Når tabellen IKKE har en DEFAULT-begrænsning

Her er, hvad der sker, når tabellen ikke har en DEFAULT-begrænsning.

SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Resultat:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| 0                     |
+-----------------------+

I dette tilfælde er objektet en tabel, det er bare, at det ikke har en DEFAULT-begrænsning.

Eksempel 4 – Når objektet ikke er en tabel

Her er, hvad der sker, når databasen indeholder et objekt med ID'et, men det objekt er ikke en tabel.

SELECT OBJECTPROPERTY(
    OBJECT_ID('Sequences.ReseedAllSequences'), 
    'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Resultat:

+-----------------------+
| TableHasDefaultCnst   |
|-----------------------|
| NULL                  |
+-----------------------+

Eksempel 5 – 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'), 'TableHasDefaultCnst') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') 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. Kontrollerer, om en ikke-LOB-kolonne skal opdateres

  2. postgres:opgradere en bruger til at være superbruger?

  3. Hvordan laver du date-matematik, der ignorerer året?

  4. GroupingError:ERROR:kolonnen skal vises i GROUP BY-sætningen eller bruges i en aggregeret funktion