Di SQL Server, OBJECTPROPERTY()
fungsi mengembalikan informasi tentang objek cakupan skema dalam database saat ini.
Objek dengan cakupan skema ini adalah objek yang dapat Anda lihat dengan menanyakan sys.objects
tampilan katalog sistem. Ini tidak dapat digunakan untuk objek yang tidak memiliki cakupan skema.
Anda dapat menggunakan OBJECTPROPERTY()
untuk memeriksa apakah suatu objek adalah tabel, tampilan, prosedur tersimpan, dll. Anda juga dapat menggunakannya untuk memeriksa apakah tabel memiliki kunci utama, kunci asing, referensi kunci asing, dll.
Sintaks
Sintaksnya sederhana. Fungsi menerima dua argumen:ID objek, dan properti yang ingin Anda kembalikan.
OBJECTPROPERTY ( id , property )
Contoh 1 – Penggunaan Dasar
Berikut adalah contoh untuk mendemonstrasikan penggunaan dasar fungsi ini.
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
Hasil:
+----------+ | Result | |----------| | 1 | +----------+
Dalam hal ini, ada objek dengan ID 885578193
dan itu meja.
Saya tahu bahwa ini adalah tabel karena hasil dari IsTable
propertinya adalah 1
. Jika objeknya bukan tabel, hasilnya di sini adalah 0
.
Contoh 2 – Memberi Nama Objek
Pada contoh sebelumnya, saya tahu ID objek. Dalam kebanyakan kasus, Anda mungkin hanya mengetahui nama objek, tetapi bukan ID-nya. Dalam kasus seperti itu, Anda dapat menggunakan OBJECT_ID()
berfungsi untuk mendapatkan ID objek, berdasarkan namanya.
Seperti ini:
SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
Hasil:
+----------+ | Result | |----------| | 1 | +----------+
Contoh 3 – Nama Objek yang Memenuhi Syarat
Saat memanggil OBJECT_ID()
fungsi, Anda juga dapat memberikan dua atau tiga nama bagian (untuk menyertakan nama skema dan nama database).
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
Hasil:
+----------+ | Result | |----------| | 1 | +----------+
Namun, jangan biarkan hal itu membuat Anda berpikir bahwa OBJECTPROPERTY()
akan menggunakan database itu. Tidak akan (kecuali jika kebetulan sama dengan database saat ini). Sejauh menyangkut, itu hanya menerima ID objek. Melupakan ini dapat menyebabkan hasil yang menyesatkan.
Berikut ini contoh untuk didemonstrasikan.
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];
Hasil:
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)
Dalam contoh ini, dua database yang berbeda kebetulan memiliki objek dengan ID yang sama. Salah satunya adalah meja dan yang lainnya bukan. Jadi kami mendapatkan hasil negatif di kueri pertama dan positif di kueri kedua.
Contoh 4 – Properti Lainnya
Berikut ini contoh yang mengembalikan lebih banyak properti.
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;
Hasil (menggunakan keluaran vertikal):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
Ini hanyalah beberapa dari 103 properti yang dapat Anda kueri OBJECTPROPERTY()
untuk. Lihat di bawah untuk daftar lengkapnya.
Contoh 5 – Dalam Klausa WHERE
Anda dapat menggunakan OBJECTPROPERTY()
dalam WHERE
klausa jika diperlukan.
Dalam contoh ini, saya menjalankan dua kueri:yang mengembalikan tabel yang memiliki kunci asing, dan yang mengembalikan tabel yang direferensikan oleh kunci asing.
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;
Hasil:
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)
Daftar Lengkap Properti
Berikut daftar lengkap properti yang didukung oleh OBJECTPROPERTY()
:
- CnstIsClustKey
- CnstIsColumn
- CnstIsDeleteCascade
- CnstDisabled
- 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
- Adalah Kendala
- Apakah Default
- IsDefaultCnst
- ApakahDeterministik
- Terenkripsi
- Dieksekusi
- IsExtendedProc
- IsForeignKey
- Diindeks
- Dapat Diindeks
- IsInlineFunction
- Sudah Dikirim
- IsPrimaryKey
- AdalahProsedur
- IsQuotedIdentOn
- IsQueue
- IsReplProc
- IsRule
- IsScalarFunction
- IsSchemaBound
- IsSystemTable
- IsSystemVerified
- IsTable
- IsTableFunction
- Pemicu
- IsUniqueCnst
- IsUserTable
- IsView
- Id Pemilik
- Id Skema
- TableDeleteTrigger
- TableDeleteTriggerCount
- TableFullTextMergeStatus
- TableFullTextBackgroundUpdateIndexOn
- TableFulltextCatalogId
- TabelFulltextChangeTrackingOn
- TabelFulltextDocsDiproses
- TabelFulltextFailCount
- TableFulltextItemCount
- TabelFulltextKeyColumn
- TabelFulltextTertundaPerubahan
- TabelFulltextPopulateStatus
- TableHasActiveFulltextIndex
- TableHasCheckCnst
- TableHasClustIndex
- TableHasDefaultCnst
- TableHasDeleteTrigger
- TableHasForeignKey
- TableHasForeignRef
- TableHasIdentity
- TableHasIndex
- TableHasInsertTrigger
- TableHasNonclustIndex
- TableHasPrimaryKey
- TableHasRowGuidCol
- TableHasTextImage
- TableHasTimestamp
- TableHasUniqueCnst
- TableHasUpdateTrigger
- TableHasVarDecimalStorageFormat
- TableInsertTrigger
- TableInsertTriggerCount
- TableIsFake
- TableIsLockedOnBulkLoad
- TableIsMemoryOptimized
- TableIsPinned
- TableTextInRowLimit
- TableUpdateTrigger
- TableUpdateTriggerCount
- TableHasColumnSet
- TableTemporalType
Lihat dokumentasi Microsoft untuk penjelasan mendetail tentang setiap properti.