Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana OBJECTPROPERTY() Bekerja di SQL Server

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kirim Email dari Pemicu di SQL Server (T-SQL)

  2. Bagaimana saya bisa menggunakan kumpulan koneksi mssql tunggal di beberapa rute dalam aplikasi web Express 4?

  3. SQL Server memeriksa sensitivitas huruf besar-kecil?

  4. Cara Menggabungkan String dan Nilai NULL di SQL Server

  5. SIN() Contoh di SQL Server