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.