I SQL Server er OBJECTPROPERTY()
funktion returnerer oplysninger om skema-omfattede objekter i den aktuelle database.
Disse skema-omfattede objekter er dem, du kan se ved at forespørge på sys.objects
systemkatalogvisning. Det kan ikke bruges til objekter, der ikke er skema-omfattede.
Du kan bruge OBJECTPROPERTY()
for at kontrollere, om et objekt er en tabel, visning, lagret procedure osv. Du kan også bruge den til at kontrollere, om en tabel har en primærnøgle, fremmednøgle, fremmednøglereference osv.
Syntaks
Syntaksen er enkel. Funktionen accepterer to argumenter:objektets ID og den egenskab, du ønsker returneret.
OBJECTPROPERTY ( id , property )
Eksempel 1 – Grundlæggende brug
Her er et eksempel for at demonstrere den grundlæggende brug af denne funktion.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
I dette tilfælde er der et objekt med et ID på 885578193
og det er et bord.
Jeg ved, at det er en tabel, fordi resultatet af IsTable
egenskaben er 1
. Hvis objektet ikke var en tabel, ville resultatet her være 0
.
Eksempel 2 – Navngivning af objektet
I det forrige eksempel kendte jeg objektets ID. I de fleste tilfælde kender du sandsynligvis kun objektets navn, men ikke dets ID. I sådanne tilfælde kan du bruge OBJECT_ID()
funktion for at få objektets ID, baseret på dets navn.
Sådan:
SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Eksempel 3 – Kvalificeret objektnavn
Når du kalder OBJECT_ID()
funktion, kan du også angive et to- eller tredelt navn (for at inkludere skemanavnet og databasenavnet).
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Men lad det ikke narre dig til at tro, at OBJECTPROPERTY()
vil bruge den database. Det vil det ikke (medmindre det tilfældigvis er det samme som den aktuelle database). For så vidt angår det, modtager det simpelthen et objekt-id. At glemme dette kan føre til et vildledende resultat.
Her er et eksempel til at demonstrere.
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];
Resultat:
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)
I dette eksempel har to forskellige databaser tilfældigvis et objekt med det samme ID. En af dem er et bord, og den anden er ikke. Så vi får et negativt resultat i den første forespørgsel og et positivt i den anden.
Eksempel 4 – Flere egenskaber
Her er et eksempel, der returnerer flere egenskaber.
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;
Resultat (ved hjælp af lodret output):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
Dette er blot nogle af de 103 egenskaber, som du kan forespørge på OBJECTPROPERTY()
til. Se nedenfor for en komplet liste.
Eksempel 5 – I en WHERE-klausul
Du kan bruge OBJECTPROPERTY()
i en WHERE
klausul om nødvendigt.
I dette eksempel kører jeg to forespørgsler:en, der returnerer tabeller, der har en fremmednøgle, og en, der returnerer tabeller, der refereres til af en fremmednøgle.
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;
Resultat:
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)
Fuld liste over egenskaber
Her er en komplet liste over egenskaber, der understøttes af 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
- HarAfterTrigger
- HasDeleteTrigger
- HasInsertTrigger
- HasInsteadOfTrigger
- HasUpdateTrigger
- IsAnsiNullsOn
- IsCheckCnst
- IsConstraint
- Er Default
- IsDefaultCnst
- Er deterministisk
- Er Krypteret
- Udføres
- IsExtendedProc
- IsForeignKey
- Er indekseret
- Kan indekseres
- IsInlineFunction
- ErMSShipped
- IsPrimary Key
- IsProcedure
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- Er SystemVerified
- IsTable
- IsTableFunction
- IsTrigger
- IsUniqueCnst
- IsUserTable
- IsView
- OwnerId
- SchemaId
- TabelDeleteTrigger
- TabelDeleteTriggerCount
- TableFullTextMergeStatus
- TabelFuldTekstBaggrundUpdateIndexOn
- TabelFuldtekstCatalogId
- TabelFuldtekstChangeTrackingOn
- TabelFuldtekstdokumenter behandlet
- TableFulltextFailCount
- TabelFuldtekstItemCount
- TabelFuldtekstNøglekolonne
- TabelFuldtekstVentende ændringer
- TabelFuldtekstBefolkningsstatus
- TabelHasActiveFulltextIndex
- TableHasCheckCnst
- TabelHasClustIndex
- TabelHasDefaultCnst
- TabelHasDeleteTrigger
- TabelHas ForeignKey
- TabelHas ForeignRef
- TabelHasIdentity
- TabelHasIndex
- TabelHasInsertTrigger
- TabelHasNonclustIndex
- TabelHasPrimaryKey
- TableHasRowGuidCol
- TableHasTextImage
- TabelHasTimestamp
- TabelHasUniqueCnst
- TabelHasUpdateTrigger
- TabelHasVarDecimalStorageFormat
- TableInsertTrigger
- TabelInsertTriggerCount
- TabelErFalsk
- TabelIsLockedOnBulkLoad
- TableIsMemoryOptimized
- Tabel er fastgjort
- TableTextInRowLimit
- TableUpdateTrigger
- TabelUpdateTriggerCount
- TabelHasColumnSet
- TableTemporalType
Se Microsoft-dokumentationen for en detaljeret forklaring af hver egenskab.