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

Verifica se una tabella ha un vincolo PREDEFINITO in SQL Server utilizzando OBJECTPROPERTY()

Puoi usare OBJECTPROPERTY() funzione in SQL Server per vedere se una tabella ha o meno un vincolo DEFAULT.

Per fare ciò, passa l'ID oggetto della tabella come primo argomento e TableHasDefaultCnst come secondo argomento. La funzione restituisce un 1 o un 0 a seconda che abbia o meno un vincolo DEFAULT.

Un valore restituito di 1 significa che la tabella ha un vincolo DEFAULT e un valore di 0 significa che non lo è.

Esempio 1 – Utilizzo di base

Ecco un rapido esempio da dimostrare.

USE WideWorldImportersDW;
SELECT OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];

Risultato:

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

In questo caso, il WideWorldImportersDW database ha una tabella con l'ID fornito e ha un vincolo DEFAULT.

Esempio 2:ottenere l'ID oggetto

Se conosci il nome della tabella, ma non il suo ID, puoi utilizzare OBJECT_ID() funzione per recuperare l'ID in base al suo nome.

Esempio:

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

Risultato:

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

Questo è lo stesso oggetto dell'esempio precedente.

Eccolo di nuovo con l'output ID separatamente.

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

Risultato:

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

Esempio 3 – Quando la tabella NON ha un vincolo PREDEFINITO

Ecco cosa succede quando la tabella non ha un vincolo DEFAULT.

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

Risultato:

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

In questo caso, l'oggetto è una tabella, è solo che non ha un vincolo DEFAULT.

Esempio 4 – Quando l'oggetto non è un tavolo

Ecco cosa succede quando il database contiene un oggetto con l'ID, ma quell'oggetto non è una tabella.

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

Risultato:

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

Esempio 5 – L'oggetto non esiste

SQL Server presuppone che l'ID oggetto si trovi nel contesto del database corrente. Se passi un ID oggetto da un database diverso, otterrai un risultato NULL o otterrai risultati errati.

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

Risultato:

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

In questo caso il database non contiene oggetti con quel nome o ID, quindi ottengo un risultato NULL.

Otterrai anche NULL in caso di errore o se non disponi dell'autorizzazione per visualizzare l'oggetto.