Saat menggunakan SQL Server, jika Anda pernah menemukan diri Anda akan melakukan penggabungan terhadap sys.objects
tampilan katalog sistem untuk mendapatkan nama suatu objek, mungkin berhenti dan membaca ini terlebih dahulu.
Transact-SQL memiliki fungsi bawaan yang disebut OBJECT_NAME()
yang mengembalikan nama objek, berdasarkan ID-nya.
Dengan kata lain, jika Anda memiliki ID objek (misalnya, object_id
kolom), Anda cukup meneruskan ID itu ke OBJECT_NAME()
fungsi, dan itu akan mengembalikan nama objek untuk Anda – tidak perlu bergabung!
Contoh 1 – Penggunaan Dasar
Berikut adalah contoh dasar untuk mendemonstrasikan cara kerjanya.
SELECT name, object_id, OBJECT_NAME(object_id) AS [OBJECT_NAME(object_id)] FROM sys.objects WHERE name = 'Artists';
Hasil:
+---------+-------------+--------------------------+ | name | object_id | OBJECT_NAME(object_id) | |---------+-------------+--------------------------| | Artists | 885578193 | Artists | +---------+-------------+--------------------------+
Di sini, kita dapat melihat bahwa dua kolom pertama menampilkan nama dan ID objek secara berurutan. Kolom ketiga menggunakan OBJECT_NAME()
berfungsi untuk mengembalikan nama dari ID.
Ini jelas hanya sebuah contoh, tetapi dalam kasus ini, menggunakan OBJECT_NAME()
tidak diperlukan karena sys.objects
sudah mengembalikan nama objek.
Contoh berikutnya menunjukkan di mana OBJECT_NAME()
bisa berguna.
Contoh 2 – Contoh yang Lebih Berguna
Dalam contoh ini, saya mengembalikan informasi tentang kunci asing dengan menanyakan sys.foreign_keys
tampilan katalog sistem.
Pertama, mari kita pilih semua kolom untuk melihat apa yang dikembalikan oleh tampilan ini:
USE Music; SELECT * FROM sys.foreign_keys WHERE name = 'FK_Artists_Country';
Hasil (menggunakan keluaran vertikal):
name | FK_Artists_Country object_id | 1253579504 principal_id | NULL schema_id | 1 parent_object_id | 885578193 type | F type_desc | FOREIGN_KEY_CONSTRAINT create_date | 2019-08-27 16:14:39.560 modify_date | 2019-08-28 03:28:07.040 is_ms_shipped | 0 is_published | 0 is_schema_published | 0 referenced_object_id | 1205579333 key_index_id | 1 is_disabled | 0 is_not_for_replication | 0 is_not_trusted | 0 delete_referential_action | 0 delete_referential_action_desc | NO_ACTION update_referential_action | 0 update_referential_action_desc | NO_ACTION is_system_named | 0
Tampilan ini mengembalikan nama kunci asing, tetapi bukan nama objek induknya. Juga tidak mengembalikan nama objek referensi kunci asing. Itu hanya mengembalikan ID objek tersebut (yaitu, parent_object_id
dan referenced_object_id
).
Jadi jika kita mempersempitnya menjadi kolom-kolom itu saja, kita akan mendapatkan sesuatu seperti ini:
USE Music; SELECT name, parent_object_id, referenced_object_id FROM sys.foreign_keys WHERE name = 'FK_Artists_Country';
Hasil:
+--------------------+--------------------+------------------------+ | name | parent_object_id | referenced_object_id | |--------------------+--------------------+------------------------| | FK_Artists_Country | 885578193 | 1205579333 | +--------------------+--------------------+------------------------+
Untungnya, kita dapat meneruskan dua kolom terakhir ke OBJECT_NAME()
untuk mengambil nama objek.
Inilah yang dapat kami lakukan untuk mengembalikan nama.
USE Music; SELECT name AS [Foreign Key], OBJECT_NAME(parent_object_id) AS [Parent Object Name], OBJECT_NAME(referenced_object_id) AS [Referenced Object Name] FROM sys.foreign_keys WHERE name = 'FK_Artists_Country';
Hasil:
+--------------------+----------------------+--------------------------+ | Foreign Key | Parent Object Name | Referenced Object Name | |--------------------+----------------------+--------------------------| | FK_Artists_Country | Artists | Country | +--------------------+----------------------+--------------------------+
Untuk dua kolom terakhir, saya meneruskan nilai yang relevan ke OBJECT_NAME()
fungsi sehingga mengembalikan nama setiap objek induk.
Contoh 3 – Menggunakan OBJECT_NAME() dalam Klausa WHERE
Berikut ini contoh penggunaan OBJECT_NAME()
dalam WHERE
klausa.
SELECT name, object_id, type_desc FROM sys.objects WHERE name = OBJECT_NAME(1253579504);
Hasil:
+--------------------+-------------+------------------------+ | name | object_id | type_desc | |--------------------+-------------+------------------------| | FK_Artists_Country | 1253579504 | FOREIGN_KEY_CONSTRAINT | +--------------------+-------------+------------------------+
Kueri Lintas Basis Data
Secara default, SQL Server mengasumsikan bahwa ID objek dalam konteks database saat ini. Kueri yang mereferensikan ID di database lain mengembalikan NULL atau hasil yang salah.
Jika Anda perlu menemukan nama objek dari database yang berbeda, Anda dapat memberikan ID database tersebut sebagai argumen kedua saat memanggil OBJECT_NAME()
.
Lihat Cara Mendapatkan OBJECT_NAME() dari Database Berbeda di SQL Server sebagai contoh.