Di SQL Server, Anda dapat menggunakan OBJECT_ID()
berfungsi untuk mengembalikan ID objek, berdasarkan namanya.
Ini bisa berguna saat Anda membutuhkan ID objek, tetapi Anda hanya tahu namanya.
Definisi resmi OBJECT_ID()
apakah itu mengembalikan nomor identifikasi objek database dari objek cakupan skema
.
Contoh 1 – Penggunaan Dasar
Berikut adalah contoh dasar untuk mendemonstrasikan cara kerjanya.
SELECT OBJECT_ID('Artists') SEBAGAI Hasil;
Hasil:
+-----------+| Hasil ||-----------|| 885578193 |+-----------+
Dalam hal ini, database saat ini memang berisi objek yang disebut Albums
, dan ID-nya adalah 885578193. Ini adalah ID yang bisa kamu temukan di object_id
kolom sys.objects
tampilan katalog sistem.
Contoh 2 – Periksa Tampilan sys.objects
Berikut contoh dasar lain untuk memverifikasi apa yang baru saja saya katakan.
SELECT name, object_id, OBJECT_ID(name) AS [OBJECT_ID(name)]FROM sys.objectsWHERE name ='Artists';
Hasil:
+---------+-------------+-------------------+| nama | objek_id | OBJECT_ID(nama) ||---------+-------------+-------------------| | Artis | 885578193 | 885578193 |+---------+-------------+-------------------+
sys.objects
tampilan katalog sistem berisi baris untuk setiap objek cakupan skema yang ditentukan pengguna yang dibuat dalam database.
Dalam contoh ini, dua kolom pertama menampilkan name
objek dan object_id
masing-masing.
Di kolom ketiga contoh ini, saya menggunakan OBJECT_ID()
untuk mengembalikan ID objek berdasarkan namanya. Untuk melakukan ini, saya meneruskan kolom nama ke OBJECT_ID()
fungsi.
Ini jelas hanya sebuah contoh, dan menggunakan OBJECT_ID()
tidak diperlukan dalam kasus ini, karena sys.objects
sudah mengembalikan ID objek.
Contoh 3 – Contoh yang Lebih Berguna
Dalam contoh ini, saya menggunakan OBJECT_ID()
dalam WHERE
klausa sehingga saya hanya mendapatkan hasil yang terkait dengan tabel yang disebut Client
.
SELECT OBJECT_NAME(referencing_id) AS [Referencing Entity], OBJECT_NAME(referencing_minor_id) AS [Referencing Minor Entity], referencing_class_desc AS [Class], COL_NAME(referenced_id, referenced_minor_id) SEBAGAI [Column_referensi]REJOB Klien');
Hasil:
+----------------------+----------------------- -----+------------------+------------+| Entitas Referensi | Merujuk Entitas Kecil | Kelas | Kolom ||----------------------+------------------------ ----+------------------+------------|| uspGetClient | NULL | OBJECT_OR_COLUMN | NULL || uspGetOrdersByClient | NULL | OBJECT_OR_COLUMN | NULL || chkClientCode | NULL | OBJECT_OR_COLUMN | ClientCode |+------------+------------------------ ----+------------------+------------+
Dalam hal ini saya ingin melihat entitas mana yang bergantung pada Client
tabel (yaitu entitas mana yang mereferensikan tabel itu dalam kode SQL mereka). referenced_id
kolom menggunakan ID objek, jadi dengan menggunakan OBJECT_ID()
, saya bisa mendapatkan ID Client
tabel dan bandingkan dengan referenced_id
.
Lihat Menemukan Dependensi di SQL Server:sql_expression_dependencies untuk penjelasan lebih rinci tentang kueri ini, dan contoh terkait.
Contoh 4 – Nama Lengkap
Anda juga memiliki opsi untuk mengkualifikasikan nama objek dengan nama skema, dan juga nama database jika diinginkan.
Berikut adalah contoh sederhana untuk ditunjukkan:
SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];Hasil:
+---------------+---------------+-------------- -+| 1 Nama Bagian | 2 Nama Bagian | 3 Nama Bagian ||---------------+---------------+------------- --|| 885578193 | 885578193 | 885578193 |+---------------+---------------+--------------- +Ini dia lagi, kali ini menggunakan tanda kurung siku sebagai pembatas:
SELECT OBJECT_ID('[Artists]') AS [1 Part Name], OBJECT_ID('[dbo].[Artists]') AS [2 Part Name], OBJECT_ID('[Music].[dbo].[ Artis]') AS [3 Nama Bagian];Hasil:
+---------------+---------------+-------------- -+| 1 Nama Bagian | 2 Nama Bagian | 3 Nama Bagian ||---------------+---------------+------------- --|| 885578193 | 885578193 | 885578193 |+---------------+---------------+--------------- +Hasil yang sama.
Jika Anda pernah mendapatkan hasil NULL meskipun Anda tahu bahwa objek itu ada, coba kualifikasikan dengan skema (dan bahkan nama database).
Contoh 5 – Kueri Lintas Basis Data
Secara default, SQL Server mengasumsikan bahwa nama objek berada dalam konteks database saat ini. Anda dapat menggunakan nama 3 bagian untuk menentukan objek dalam database yang berbeda.
Ini kode yang sama dari contoh sebelumnya, kecuali kali ini saya menjalankan kode dua kali:pertama kali dijalankan di
Music
database, kedua kalinya dijalankan diWideWorldImportersDW
basis data:GUNAKAN Musik;SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name ];GUNAKAN WideWorldImportersDW;SELECT OBJECT_ID('Artists') AS [1 Part Name], OBJECT_ID('dbo.Artists') AS [2 Part Name], OBJECT_ID('Music.dbo.Artists') AS [3 Part Name];Hasil:
Mengubah konteks basis data menjadi 'Musik'.+---------------+---------------+------ ---------+| 1 Nama Bagian | 2 Nama Bagian | 3 Nama Bagian ||---------------+---------------+------------- --|| 885578193 | 885578193 | 885578193 |+---------------+---------------+--------------- +(1 baris terpengaruh)Mengubah konteks basis data menjadi 'WideWorldImportersDW'.+---------------+---------------+---- ------------+| 1 Nama Bagian | 2 Nama Bagian | 3 Nama Bagian ||---------------+---------------+------------- --|| NULL | NULL | 885578193 |+---------------+---------------+--------------- +(1 baris terpengaruh)Pada hasil pertama, ketiga kolom mengembalikan ID yang benar. Ini karena objek kebetulan berada di
Music
basis data.Pada hasil kedua, hanya 3 bagian nama yang dapat menemukan objek yang benar. Hal ini diharapkan, karena nama bagian 1 dan bagian 2 tidak menentukan nama database, oleh karena itu diasumsikan objek berada di
WideWorldImportersDW
(salah) basis data.Contoh 6 – Tentukan Jenis Objek
OBJECT_ID()
function juga menerima argumen untuk tipe objek. Argumen ini, jika diberikan, muncul setelah nama objek.Contoh:
SELECT OBJECT_ID('Artists', 'U') AS [Tabel];Hasil:
+-----------+| Tabel ||-----------|| 885578193 |+-----------+Di sini, saya menentukan bahwa tipe objek adalah
U
, yang berarti “Tabel (ditentukan pengguna)”.Jika saya mencoba untuk menentukan jenis objek yang berbeda, saya mendapatkan
NULL
:SELECT OBJECT_ID('Artists', 'U') AS [Tabel], OBJECT_ID('Artists', 'V') AS [View], OBJECT_ID('Artists', 'P') AS [Stored Procedure];Hasil:
+-----------+--------+------+| Tabel | Lihat | Prosedur Tersimpan ||-----------+--------+----------|| 885578193 | NULL | NULL |+------------+--------+------+Ini dia lagi, tetapi dengan nama tampilan sebagai gantinya:
SELECT OBJECT_ID('RockAlbums', 'U') AS [Tabel], OBJECT_ID('RockAlbums', 'V') AS [View], OBJECT_ID('RockAlbums', 'P') SEBAGAI [Prosedur Tersimpan];Hasil:
+---------+------------+---------+| Tabel | Lihat | Prosedur Tersimpan ||---------+------------+--------------------|| NULL | 1525580473 | NULL |+---------+------------+--------------------+