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

Dapatkan ID Objek dari Namanya di SQL Server:OBJECT_ID()

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 di WideWorldImportersDW 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 |+---------+------------+--------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Atur susunan basis data dalam Entity Framework Code-First Initializer

  2. Menggunakan Peristiwa yang Diperpanjang untuk Mencatat Fitur yang Tidak Digunakan Lagi dalam Instance SQL Server (Contoh T-SQL)

  3. Apa artinya =*?

  4. Memasukkan data SQL Server ke Salesforce.com

  5. LOG10() Contoh di SQL Server