V SQL Server, OBJECTPROPERTY()
Funkce vrací informace o objektech s rozsahem schématu v aktuální databázi.
Tyto objekty s rozsahem schématu jsou ty, které můžete zobrazit dotazem na sys.objects
zobrazení katalogu systému. Nelze jej použít pro objekty, které nemají rozsah schématu.
Můžete použít OBJECTPROPERTY()
ke kontrole, zda je objekt tabulkou, pohledem, uloženou procedurou atd. Můžete jej také použít ke kontrole, zda tabulka má primární klíč, cizí klíč, odkaz na cizí klíč atd.
Syntaxe
Syntaxe je jednoduchá. Funkce přijímá dva argumenty:ID objektu a vlastnost, kterou chcete vrátit.
OBJECTPROPERTY ( id , property )
Příklad 1 – Základní použití
Zde je příklad demonstrující základní použití této funkce.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Výsledek:
+----------+ | Result | |----------| | 1 | +----------+
V tomto případě se jedná o objekt s ID 885578193
a je to stůl.
Vím, že je to tabulka, protože výsledek IsTable
vlastnost je 1
. Pokud by objekt nebyl tabulkou, výsledek by zde byl 0
.
Příklad 2 – Pojmenování objektu
V předchozím příkladu jsem znal ID objektu. Ve většině případů pravděpodobně budete znát pouze název objektu, ale ne jeho ID. V takových případech můžete použít OBJECT_ID()
funkce k získání ID objektu na základě jeho názvu.
Takhle:
SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Výsledek:
+----------+ | Result | |----------| | 1 | +----------+
Příklad 3 – kvalifikovaný název objektu
Při volání OBJECT_ID()
můžete také zadat název se dvěma nebo třemi částmi (včetně názvu schématu a názvu databáze).
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Výsledek:
+----------+ | Result | |----------| | 1 | +----------+
Nenechte se tím však přimět, abyste si mysleli, že OBJECTPROPERTY()
použije tuto databázi. Nebude (pokud náhodou není stejná jako aktuální databáze). Pokud jde o to, jednoduše přijímá ID objektu. Zapomenutí by mohlo vést k zavádějícímu výsledku.
Zde je příklad k demonstraci.
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];
Výsledek:
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)
V tomto příkladu mají dvě různé databáze objekt se stejným ID. Jeden z nich je stůl a druhý ne. Takže dostaneme negativní výsledek v prvním dotazu a pozitivní v druhém.
Příklad 4 – Další vlastnosti
Zde je příklad, který vrací více vlastností.
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;
Výsledek (při použití vertikálního výstupu):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
Toto jsou jen některé ze 103 vlastností, na které se můžete dotazovat OBJECTPROPERTY()
pro. Úplný seznam naleznete níže.
Příklad 5 – V klauzuli WHERE
Můžete použít OBJECTPROPERTY()
v WHERE
doložka, je-li požadována.
V tomto příkladu spustím dva dotazy:jeden, který vrátí tabulky, které mají cizí klíč, a jeden, který vrátí tabulky, na které odkazuje cizí klíč.
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;
Výsledek:
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)
Úplný seznam vlastností
Zde je úplný seznam vlastností podporovaných funkcí OBJECTPROPERTY()
:
- CnstIsClustKey
- CnstIsColumn
- CnstIsDeleteCascade
- CnstIsDisabled
- CnstIsNonclustKey
- CnstIsNotRepl
- CnstIsNotTrusted
- CnstIsUpdateCascade
- ExecIsAfterTrigger
- ExecIsAnsiNullsOn
- ExecIsDeleteTrigger
- ExecIsFirstDeleteTrigger
- ExecIsFirstInsertTrigger
- ExecIsFirstUpdateTrigger
- ExecIsInsertTrigger
- ExecIsInsteadOfTrigger
- ExecIsLastDeleteTrigger
- ExecIsLastInsertTrigger
- ExecIsLastUpdateTrigger
- ExecIsQuotedIdentOn
- ExecIsStartup
- ExecIsTriggerDisabled
- ExecIsTriggerNotForRepl
- ExecIsUpdateTrigger
- ExecIsWithNativeCompilation
- HasAfterTrigger
- HasDeleteTrigger
- HasInsertTrigger
- HasInsteadOfTrigger
- HasUpdateTrigger
- IsAnsiNullsOn
- IsCheckCnst
- IsConstraint
- Je výchozí
- IsDefaultCnst
- IsDeterministic
- IsEncrypted
- IsExecuted
- IsExtendedProc
- JeForeignKey
- IsIndexed
- Je indexovatelné
- IsInlineFunction
- IsMSShipped
- IsPrimaryKey
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- IsTable
- IsTableFunction
- IsTrigger
- JeUniqueCnst
- IsUserTable
- IsView
- ID vlastníka
- SchemaId
- TableDeleteTrigger
- TableDeleteTriggerCount
- TableFullTextMergeStatus
- TableFullTextBackgroundUpdateIndexOn
- TableFulltextCatalogId
- TableFulltextChangeTrackingOn
- TableFulltextDocsProcessed
- TableFulltextFailCount
- TableFulltextItemCount
- TableFulltextKeyColumn
- TableFulltextPendingChanges
- TableFulltextPopulateStatus
- TableHasActiveFulltextIndex
- TableHasCheckCnst
- TableHasClustIndex
- TableHasDefaultCnst
- TableHasDeleteTrigger
- TableHasForeignKey
- TableHasForeignRef
- TableHasIdentity
- TableHasIndex
- TableHasInsertTrigger
- TableHasNonclusIndex
- TableHasPrimaryKey
- TableHasRowGuidCol
- TableHasTextImage
- TableHasTimestamp
- TableHasUniqueCnst
- TableHasUpdateTrigger
- TableHasVarDecimalStorageFormat
- TableInsertTrigger
- TableInsertTriggerCount
- TableIsFake
- TableIsLockedOnBulkLoad
- TableIsMemoryOptimized
- TableIsPinned
- TableTextInRowLimit
- TableUpdateTrigger
- TableUpdateTriggerCount
- TableHasColumnSet
- TableTemporalType
Podrobné vysvětlení každé vlastnosti naleznete v dokumentaci společnosti Microsoft.