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

Como OBJECTPROPERTYEX() funciona no SQL Server


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.