Você pode usar o
OBJECTPROPERTY()
função no SQL Server para ver se uma tabela tem ou não uma restrição DEFAULT. Para fazer isso, passe o ID do objeto da tabela como o primeiro argumento e
TableHasDefaultCnst
como segundo argumento. A função retorna um 1
ou um 0
dependendo se tem ou não uma restrição DEFAULT. Um valor de retorno de
1
significa que a tabela tem uma restrição DEFAULT e um valor de 0
significa que não é. Exemplo 1 – Uso básico
Aqui está um exemplo rápido para demonstrar.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1141579105, 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultado:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 1 | +-----------------------+
Nesse caso, o WideWorldImportersDW banco de dados tem uma tabela com o ID fornecido e tem uma restrição DEFAULT.
Exemplo 2 – Obtendo o ID do objeto
Se você sabe o nome da tabela, mas não seu ID, você pode usar o
OBJECT_ID()
função para recuperar o ID com base em seu nome. Exemplo:
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultado:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 1 | +-----------------------+
Este é o mesmo objeto do exemplo anterior.
Aqui está novamente com a saída de ID separadamente.
SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultado:
+-------------+-----------------------+ | Object ID | TableHasDefaultCnst | |-------------+-----------------------| | 1013578649 | 1 | +-------------+-----------------------+
Exemplo 3 – Quando a Tabela NÃO possui uma restrição DEFAULT
Aqui está o que acontece quando a tabela não tem uma restrição DEFAULT.
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Movement'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultado:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | 0 | +-----------------------+
Neste caso, o objeto é uma tabela, só que não possui uma restrição DEFAULT.
Exemplo 4 – Quando o objeto não é uma tabela
Aqui está o que acontece quando o banco de dados contém um objeto com o ID, mas esse objeto não é uma tabela.
SELECT OBJECTPROPERTY( OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasDefaultCnst') AS [TableHasDefaultCnst];
Resultado:
+-----------------------+ | TableHasDefaultCnst | |-----------------------| | NULL | +-----------------------+
Exemplo 5 – O objeto não existe
O SQL Server assume que a identificação do objeto está no contexto do banco de dados atual. Se você passar um ID de objeto de um banco de dados diferente, obterá um resultado NULL ou obterá resultados incorretos.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasDefaultCnst') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasDefaultCnst') AS [12345678];
Resultado:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
Nesse caso, o banco de dados não contém objetos com esse nome ou ID e, portanto, recebo um resultado NULL.
Você também receberá NULL em caso de erro ou se não tiver permissão para visualizar o objeto.