No SQL Server, o
OBJECTPROPERTY()
A função retorna informações sobre objetos com escopo de esquema no banco de dados atual. Esses objetos com escopo de esquema são os que você pode ver consultando o
sys.objects
visualização do catálogo do sistema. Ele não pode ser usado para objetos que não têm escopo de esquema. Você pode usar
OBJECTPROPERTY()
para verificar se um objeto é uma tabela, visão, procedimento armazenado, etc. Você também pode usá-lo para verificar se uma tabela tem uma chave primária, chave estrangeira, referência de chave estrangeira, etc. Sintaxe
A sintaxe é simples. A função aceita dois argumentos:o ID do objeto e a propriedade que você deseja retornar.
OBJECTPROPERTY ( id , property )
Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar o uso básico desta função.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Resultado:
+----------+ | Result | |----------| | 1 | +----------+
Nesse caso, há um objeto com um ID de
885578193
e é uma mesa. Eu sei que é uma tabela porque o resultado do
IsTable
propriedade é 1
. Se o objeto não fosse uma tabela, o resultado aqui seria 0
. 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 OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Resultado:
+----------+ | Result | |----------| | 1 | +----------+
Exemplo 3 - Nome do objeto qualificado
Ao chamar o
OBJECT_ID()
função, você também pode fornecer um nome de duas ou três partes (para incluir o nome do esquema e o nome do banco de dados). SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Resultado:
+----------+ | Result | |----------| | 1 | +----------+
No entanto, não deixe que isso o leve a pensar que
OBJECTPROPERTY()
usará esse banco de dados. Não vai (a menos que seja o mesmo que o banco de dados atual). No que diz respeito, está simplesmente recebendo um ID de objeto. Esquecer isso pode levar a um resultado enganoso. Aqui está um exemplo para demonstrar.
USE WideWorldImportersDW; SELECT OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID], OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME], OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable]; USE Music; SELECT OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID], OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME], OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable];
Resultado:
Changed database context to 'WideWorldImportersDW'. +-------------+---------------+-----------+ | OBJECT_ID | OBJECT_NAME | IsTable | |-------------+---------------+-----------| | 885578193 | CityKey | 0 | +-------------+---------------+-----------+ (1 row affected) Changed database context to 'Music'. +-------------+---------------+-----------+ | OBJECT_ID | OBJECT_NAME | IsTable | |-------------+---------------+-----------| | 885578193 | Artists | 1 | +-------------+---------------+-----------+ (1 row affected)
Neste exemplo, dois bancos de dados diferentes têm um objeto com o mesmo ID. Um deles é uma mesa e o outro não. Assim, obtemos um resultado negativo na primeira consulta e positivo na segunda.
Exemplo 4 – Mais propriedades
Aqui está um exemplo que retorna mais propriedades.
USE WideWorldImportersDW; DECLARE @objectId int = OBJECT_ID(N'Dimension.City'); SELECT OBJECTPROPERTY(@objectId, 'OwnerId') AS OwnerId, OBJECTPROPERTY(@objectId, 'SchemaId') AS SchemaId, OBJECTPROPERTY(@objectId, 'IsTable') AS IsTable, OBJECTPROPERTY(@objectId, 'TableHasPrimaryKey') AS TableHasPrimaryKey, OBJECTPROPERTY(@objectId, 'TableHasForeignKey') AS TableHasForeignKey, OBJECTPROPERTY(@objectId, 'TableHasForeignRef') AS TableHasForeignRef, OBJECTPROPERTY(@objectId, 'TableHasIdentity') AS TableHasIdentity;
Resultado (usando saída vertical):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
Estas são apenas algumas das 103 propriedades que você pode consultar
OBJECTPROPERTY()
por. Veja abaixo uma lista completa. Exemplo 5 - Em uma cláusula WHERE
Você pode usar
OBJECTPROPERTY()
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 WideWorldImporters; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTY(object_id, 'TableHasForeignKey') = 1; SELECT SCHEMA_NAME(schema_id) AS [Schema], name AS [Table] FROM sys.tables WHERE OBJECTPROPERTY(object_id, 'TableHasForeignRef') = 1;
Resultado:
Changed database context to 'WideWorldImporters'. +-------------+-----------------------+ | Schema | Table | |-------------+-----------------------| | Warehouse | Colors | | Sales | OrderLines | | Warehouse | PackageTypes | | Warehouse | StockGroups | | Warehouse | StockItemStockGroups | | Application | StateProvinces | | Sales | CustomerTransactions | | Application | Cities | | Application | SystemParameters | | Sales | InvoiceLines | | Purchasing | Suppliers | | Warehouse | StockItemTransactions | | Sales | Customers | | Purchasing | PurchaseOrders | | Sales | Orders | | Application | People | | Warehouse | StockItems | | Application | Countries | | Warehouse | StockItemHoldings | | Purchasing | PurchaseOrderLines | | Application | DeliveryMethods | | Application | PaymentMethods | | Purchasing | SupplierTransactions | | Application | TransactionTypes | | Sales | SpecialDeals | | Purchasing | SupplierCategories | | Sales | BuyingGroups | | Sales | Invoices | | Sales | CustomerCategories | +-------------+-----------------------+ (29 rows affected) +-------------+--------------------+ | Schema | Table | |-------------+--------------------| | Warehouse | Colors | | Warehouse | PackageTypes | | Warehouse | StockGroups | | Application | StateProvinces | | Application | Cities | | Purchasing | Suppliers | | Sales | Customers | | Purchasing | PurchaseOrders | | Sales | Orders | | Application | People | | Warehouse | StockItems | | Application | Countries | | Application | DeliveryMethods | | Application | PaymentMethods | | Application | TransactionTypes | | Purchasing | SupplierCategories | | Sales | BuyingGroups | | Sales | Invoices | | Sales | CustomerCategories | +-------------+--------------------+ (19 rows affected)
Lista completa de propriedades
Aqui está uma lista completa de propriedades suportadas por
OBJECTPROPERTY()
:- 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
- IsPrimaryKey
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- ÉTabela
- IsTableFunction
- ÉAcionador
- IsUniqueCnst
- IsUserTable
- IsView
- Proprietário
- EsquemaId
- TableDeleteTrigger
- TableDeleteTriggerCount
- TableFullTextMergeStatus
- TableFullTextBackgroundUpdateIndexOn
- TableFulltextCatalogId
- TableFulltextChangeTrackingOn
- TableFulltextDocsProcessed
- TableFulltextFailCount
- TableFulltextItemCount
- TableFulltextKeyColumn
- TableFulltextPendingChanges
- TableFulltextPopulateStatus
- 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
- TableHasColumnSet
- TableTemporalType
Consulte a documentação da Microsoft para obter uma explicação detalhada de cada propriedade.