No SQL Server, o
OBJECTPROPERTYEX()
A função retorna informações sobre objetos com escopo de esquema no banco de dados atual. Esta função faz exatamente a mesma coisa que
OBJECTPROPERTY()
, exceto que ele suporta mais propriedades e o valor de retorno é diferente. O OBJECTPROPERTYEX()
função retorna uma sql_variant tipo, enquanto OBJECTPROPERTY()
retorna um int tipo. Sintaxe
A função aceita dois argumentos:o ID do objeto e a propriedade que você deseja retornar.
OBJECTPROPERTYEX ( id , property )
Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar o uso básico desta função.
SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;
Resultado:
+----------+ | Result | |----------| | U | +----------+
Nesse caso, há um objeto com um ID de
885578193
e é uma mesa. O BaseType deste objeto é U. Exemplo 2 – Nomeando o objeto
No exemplo anterior, eu sabia o ID do objeto. Na maioria dos casos, você provavelmente saberá apenas o nome do objeto, mas não seu ID. Nesses casos, você pode usar o
OBJECT_ID()
função para obter o ID do objeto, com base em seu nome. Assim:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;
Resultado:
+----------+ | Result | |----------| | U | +----------+
Exemplo 3 – Mais propriedades
Aqui está um exemplo que retorna mais propriedades que você não retornará com
OBJECTPROPERTY()
. USE WideWorldImportersDW; DECLARE @objectId int = OBJECT_ID(N'Integration.GenerateDateDimensionColumns'); SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType, OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise, OBJECTPROPERTYEX(@objectId, 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess;
Resultado:
+------------+-------------+--------------------+------------------+ | BaseType | IsPrecise | SystemDataAccess | UserDataAccess | |------------+-------------+--------------------+------------------| | IF | 0 | 1 | 1 | +------------+-------------+--------------------+------------------+
No momento da escrita, o
OBJECTPROPERTYEX()
função suporta 109 propriedades. Veja abaixo uma lista completa de propriedades suportadas por esta função. Exemplo 4 - Em uma cláusula WHERE
Você pode usar
OBJECTPROPERTYEX()
em um WHERE
cláusula, se necessário. Neste exemplo, executo duas consultas:uma que retorna tabelas que possuem uma chave estrangeira e outra que retorna tabelas referenciadas por uma chave estrangeira.
USE Music; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignKey') = 1; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignRef') = 1;
Resultado:
Changed database context to 'Music'. +----------+---------+ | Schema | Table | |----------+---------| | dbo | Artists | | dbo | Albums | +----------+---------+ (2 rows affected) +----------+---------+ | Schema | Table | |----------+---------| | dbo | Artists | | dbo | Genres | | dbo | Country | +----------+---------+ (3 rows affected)
Lista completa de propriedades
Aqui está uma lista completa de propriedades suportadas pelo
OBJECTPROPERTYEX()
função:- Tipo de base
- CnstIsClustKey
- CnstIsColumn
- CnstIsDeleteCascade
- CnstIsDisabled
- CnstIsNonclustKey
- CnstIsNotRepl
- CnstIsNotTrusted
- CnstIsUpdateCascade
- ExecIsAfterTrigger
- ExecIsAnsiNullsOn
- ExecIsDeleteTrigger
- ExecIsFirstDeleteTrigger
- ExecIsFirstInsertTrigger
- ExecIsFirstUpdateTrigger
- ExecIsInsertTrigger
- ExecIsInsteadOfTrigger
- ExecIsLastDeleteTrigger
- ExecIsLastInsertTrigger
- ExecIsLastUpdateTrigger
- ExecIsQuotedIdentOn
- ExecIsStartup
- ExecIsTriggerDesativado
- ExecIsTriggerNotForRepl
- ExecIsUpdateTrigger
- ExecIsWithNativeCompilation
- HasAfterTrigger
- HasDeleteTrigger
- HasInsertTrigger
- HasInsteadOfTrigger
- HasUpdateTrigger
- IsAnsiNullsOn
- IsCheckCnst
- ÉRestrição
- É padrão
- IsDefaultCnst
- ÉDeterminístico
- Está criptografado
- IsExecuted
- IsExtendedProc
- IsForeignKey
- É Indexado
- É indexável
- IsInlineFunction
- IsMSEnviado
- É preciso
- IsPrimaryKey
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- ÉTabela
- IsTableFunction
- ÉAcionador
- IsUniqueCnst
- IsUserTable
- IsView
- Proprietário
- EsquemaId
- SystemDataAccess
- TableDeleteTrigger
- TableDeleteTriggerCount
- TableFullTextMergeStatus
- TableFullTextBackgroundUpdateIndexOn
- TableFulltextCatalogId
- TableFullTextChangeTrackingOn
- TableFulltextDocsProcessed
- TableFulltextFailCount
- TableFulltextItemCount
- TableFulltextKeyColumn
- TableFulltextPendingChanges
- TableFulltextPopulateStatus
- TableFullTextSemanticExtraction
- TableHasActiveFulltextIndex
- TableHasCheckCnst
- TableHasClustIndex
- TableHasDefaultCnst
- TableHasDeleteTrigger
- TableHasForeignKey
- TableHasForeignRef
- TableHasIdentity
- TableHasIndex
- TableHasInsertTrigger
- TableHasNonclustIndex
- TableHasPrimaryKey
- TableHasRowGuidCol
- TableHasTextImage
- TableHasTimestamp
- TableHasUniqueCnst
- TableHasUpdateTrigger
- TableHasVarDecimalStorageFormat
- TableInsertTrigger
- TableInsertTriggerCount
- A tabela é falsa
- TableIsLockedOnBulkLoad
- TableIsMemoryOtimizado
- A tabela está fixada
- TableTextInRowLimit
- TableUpdateTrigger
- TableUpdateTriggerCount
- UserDataAccess
- TableHasColumnSet
- Cardinalidade
- TableTemporalType
Consulte a documentação da Microsoft para obter uma explicação detalhada de cada propriedade.
Veja também
OBJECTPROPERTY()
vs OBJECTPROPERTYEX()
para uma explicação mais detalhada das diferenças entre essas duas funções.