Di SQL Server, Anda mungkin menemukan OBJECTPROPERTY()
fungsi, hanya untuk mengetahui bahwa ada juga OBJECTPROPERTYEX()
fungsi yang tampaknya melakukan hal yang persis sama.
Apa yang terjadi di sini? Mengapa perlu dua fungsi yang melakukan hal yang sama?
Pemahaman saya adalah bahwa Microsoft memilih untuk menambahkan OBJECTPROPERTYEX()
untuk memperluas fungsionalitas OBJECTPROPERTY()
, daripada memperkenalkan perubahan pada OBJECTPROPERTY()
yang berpotensi merusak kode yang ada pada sistem lama.
Jadi ada beberapa perbedaan antara kedua fungsi tersebut.
Apa Bedanya?
Singkatnya, OBJECTPROPERTYEX()
mendukung enam properti tambahan, dan tipe pengembaliannya berbeda.
Berikut rinciannya.
PROPERTI OBYEK() | OBJECTPROPERTYEX() | |
---|---|---|
Jenis Pengembalian | int | sql_variant |
Jumlah Properti yang Didukung | 103 | 109 |
Properti Ekstra |
| |
Properti yang Didukung |
|
|
Contoh Properti Ekstra
Berikut adalah contoh yang menunjukkan properti tambahan yang digunakan.
GUNAKAN WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Integration.GenerateDateDimensionColumns');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') SEBAGAI Tipe Dasar, OBJECTPROPERTYEX(@objectPrecise') AS(@IdPreciseId, 'IsdId , 'SystemDataAccess') AS SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') SEBAGAI TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') SEBAGAI UserDataAccess, OBJECTPROPERTYEX,Hasil (menggunakan keluaran vertikal):
Tipe Dasar | IFIsPrecise | 0SystemDataAccess | 1TabelFullTextSemanticExtraction | 0UserDataAccess | 1 Kardinalitas | NULL
Dalam hal ini, objek adalah fungsi bernilai tabel, dan mengembalikan data untuk lima dari enam properti.
Sekarang mari kita berikan nama tabel untuk melihat apakah kita bisa mendapatkan nilai kardinalitas.
GUNAKAN WideWorldImportersDW;DECLARE @objectId int =OBJECT_ID(N'Dimension.City');SELECT OBJECTPROPERTYEX(@objectId, 'BaseType') SEBAGAI BaseType, OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise, OBJECT , 'SystemDataAccess') SEBAGAI SystemDataAccess, OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction, OBJECTPROPERTYEX(@objectId, 'UserDataAccess') SEBAGAI UserDataAccess, OBJECTPROPERTYEX,Hasil (menggunakan keluaran vertikal):
Tipe Dasar | U IsPrecise | NULLSystemDataAccess | NULLTableFullTextSemanticExtraction | 0UserDataAccess | NULLKardinalitas | 116295
Kali ini kita mendapatkan NULL untuk tiga properti, tetapi kita mendapatkan nilai untuk properti Cardinality.