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

Verifique se um objeto é uma chave primária com OBJECTPROPERTY() no SQL Server


Você pode usar o OBJECTPROPERTY() função no SQL Server para verificar se um objeto é ou não uma chave primária.

Para descobrir se um objeto é uma chave primária, passe o ID do objeto como o primeiro argumento e IsPrimaryKey como segundo argumento. A função retorna um 1 ou um 0 dependendo se é ou não uma chave primária.

Um valor de retorno de 1 significa que é uma chave primária e um valor de 0 significa que não é.


Exemplo 1 – Uso básico


Aqui está um exemplo rápido para demonstrar.
USE PK_Test;
SELECT OBJECTPROPERTY(901578250, 'IsPrimaryKey') AS [IsPrimaryKey];

Resultado:
+----------------+
| IsPrimaryKey   |
|----------------|
| 1              |
+----------------+

Nesse caso, o PK_Test banco de dados tem um objeto com o ID fornecido e é uma chave primária.

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('PK_Musician'), 'IsPrimaryKey') AS [IsPrimaryKey];

Resultado:
+----------------+
| IsPrimaryKey   |
|----------------|
| 1              |
+----------------+

Nesse caso, verifiquei o mesmo objeto do exemplo anterior.

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

Resultado:
+-------------+----------------+
| Object ID   | IsPrimaryKey   |
|-------------+----------------|
| 901578250   | 1              |
+-------------+----------------+

Exemplo 3 – Quando o objeto NÃO é uma chave primária


Aqui está o que acontece quando o objeto não é uma chave primária.
SELECT OBJECTPROPERTY(885578193, 'IsPrimaryKey') AS [IsPrimaryKey];

Resultado:
+----------------+
| IsPrimaryKey   |
|----------------|
| 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('Musician') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsPrimaryKey') AS [IsPrimaryKey],
  OBJECTPROPERTY(OBJECT_ID('Musician'), 'IsTable') AS [IsTable];

Resultado:
+-------------+----------------+-----------+
| Object ID   | IsPrimaryKey   | IsTable   |
|-------------+----------------+-----------|
| 885578193   | 0              | 1         |
+-------------+----------------+-----------+

Também verifiquei se o objeto é uma tabela e o resultado é positivo.

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('InvalidObject'), 'IsPrimaryKey') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'IsPrimaryKey') 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.