Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Use OBJECTPROPERTY() para descobrir se um objeto é uma restrição CHECK no SQL Server


No SQL Server você pode usar o OBJECTPROPERTY() função para descobrir se um objeto é ou não um CHECK limitação.

Essa função aceita dois parâmetros:o ID do objeto e a propriedade para a qual você está verificando.

Portanto, você pode passar o ID do objeto como o primeiro argumento e IsCheckCnst como o segundo, e a função retornará um 1 ou um 0 dependendo se é ou não um CHECK limitação.

Um valor de retorno de 1 significa que é a CHECK restrição e um valor de 0 significa que não é.


Exemplo 1 – Verificando uma restrição CHECK


Aqui está um exemplo rápido para demonstrar.
USE Test;
SELECT OBJECTPROPERTY(178099675, 'IsCheckCnst') AS [IsCheckCnst];

Resultado:
+---------------+
| IsCheckCnst   |
|---------------|
| 1             |
+---------------+

Nesse caso, o Teste banco de dados tem um objeto com o ID fornecido, e na verdade é um CHECK limitação.

Exemplo 2 – Obtendo o ID do objeto


Se você sabe o nome do objeto, 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('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Resultado:
+---------------+
| IsCheckCnst   |
|---------------|
| 1             |
+---------------+

Nesse caso, verifiquei o mesmo objeto do exemplo anterior.

Aqui está novamente com a saída de ID separadamente.
SELECT 
  OBJECT_ID('chkEndDate') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('chkEndDate'), 'IsCheckCnst') AS [IsCheckCnst];

Resultado:
+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 178099675   | 1             |
+-------------+---------------+

Exemplo 3 - Verificando uma Tabela (ou seja, NÃO uma restrição CHECK)


Veja o que acontece quando o objeto não é um CHECK limitação.
SELECT OBJECTPROPERTY(18099105, 'IsCheckCnst') AS [IsCheckCnst];

Resultado:
+---------------+
| IsCheckCnst   |
|---------------|
| 0             |
+---------------+

Nesse caso, o banco de dados não na verdade tenho um objeto com esse ID, mas o objeto na verdade é uma tabela, então recebo um resultado negativo.

Aqui está novamente usando OBJECT_ID() .
SELECT 
  OBJECT_ID('Individual') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Individual'), 'IsCheckCnst') AS [IsCheckCnst];

Resultado:
+-------------+---------------+
| Object ID   | IsCheckCnst   |
|-------------+---------------|
| 18099105    | 0             |
+-------------+---------------+

Exemplo 4 – 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('NonExistentObject'), 'IsCheckCnst') AS [NonExistentObject],
  OBJECTPROPERTY(11111111, 'IsCheckCnst') AS [11111111];

Resultado:
+---------------------+------------+
| NonExistentObject   | 11111111   |
|---------------------+------------|
| NULL                | NULL       |
+---------------------+------------+

Nesse caso, o banco de dados não contém objetos com esse nome ou ID.