A
OBJECTPROPERTY()
função no SQL Server permite que você verifique um objeto para uma propriedade específica. Você pode usar esta função para verificar se um objeto é uma tabela do sistema ou não. Para fazer isso, passe o ID do objeto como o primeiro argumento e
IsSystemTable
como segundo argumento. A função retorna um 1
ou um 0
dependendo se é ou não uma tabela de sistema (1
significa que é uma tabela de sistema e 0
significa que não). Exemplo 1 – Uso básico
Aqui está um exemplo rápido para demonstrar.
SELECT OBJECTPROPERTY(3, 'IsSystemTable') AS [IsSystemTable];
Resultado:
+-----------------+ | IsSystemTable | |-----------------| | 1 | +-----------------+
Nesse caso, o objeto é uma tabela de sistema.
Exemplo 2 – Objeto NÃO é uma Tabela de Sistema
Aqui está o que acontece quando o objeto não é uma tabela de sistema.
SELECT OBJECTPROPERTY(1013578649, 'IsSystemTable') AS [IsSystemTable];
Resultado:
+-----------------+ | IsSystemTable | |-----------------| | 0 | +-----------------+
Nesse caso, o banco de dados não na verdade tenho um objeto com esse ID, mas o objeto é na verdade uma tabela definida pelo usuário, então recebo um resultado negativo.
Aqui está novamente usando
OBJECT_ID()
para obter o ID do nome do objeto. SELECT OBJECT_ID('Dimension.City') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsSystemTable') AS [IsSystemTable], OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'IsUserTable') AS [IsUserTable];
Resultado:
+-------------+-----------------+---------------+ | Object ID | IsSystemTable | IsUserTable | |-------------+-----------------+---------------| | 1013578649 | 0 | 1 | +-------------+-----------------+---------------+
Também verifiquei se o objeto é uma tabela definida pelo usuário e o resultado é positivo.
Exemplo 3 – 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'), 'IsSystemTable') AS [InvalidObject], OBJECTPROPERTY(12345678, 'IsSystemTable') 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, obtenho um resultado NULL.
Você também receberá NULL em caso de erro ou se não tiver permissão para visualizar o objeto.