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

Gunakan OBJECT_NAME() untuk Mendapatkan Nama Objek dari object_id-nya di SQL Server

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.


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

  2. Bisakah batasan Periksa berhubungan dengan tabel lain?

  3. Apa saja Jenis Kendala yang Tersedia di SQL Server - Tutorial SQL Server / T-SQL Bagian 50

  4. Metode untuk Peringkat Baris di SQL Server:ROW_NUMBER(), RANK(), DENSE_RANK() dan NTILE()

  5. Bagaimana saya bisa terhubung ke Sql Server dari Mac dengan PHP PDO?