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

Cara Menggunakan OBJECT_ID() pada Objek Lintas Database di SQL Server

Satu perbedaan antara OBJECT_ID() dan OBJECT_NAME() di SQL Server adalah sintaks yang digunakan untuk kueri lintas basis data. Maksud saya, ketika mereka digunakan pada objek di database yang berbeda.

OBJECT_NAME() function memiliki argumen opsional yang dapat Anda berikan, yang menentukan ID database database yang berisi objek yang Anda coba dapatkan namanya. Memberikan argumen ini memungkinkan Anda mendapatkan nama objek pada database yang berbeda.

OBJECT_ID() fungsi di sisi lain, tidak memerlukan argumen seperti itu. Sebagai gantinya, fungsi ini memungkinkan Anda menggunakan nama 3 bagian untuk menentukan database, skema, dan nama objek yang ingin Anda dapatkan IDnya.

Artikel ini berisi contoh penggunaan OBJECT_ID() untuk mendapatkan nama objek dari database yang berbeda.

Contoh 1 – Kueri Dasar

Berikut adalah contoh dasar untuk mendemonstrasikan cara kerjanya.

USE WideWorldImportersDW;
SELECT OBJECT_ID('Music.dbo.Artists') AS Result;

Hasil:

+-----------+
| Result    |
|-----------|
| 885578193 |
+-----------+

Di sini, saya beralih ke WideWorldImportersDW database, lalu menanyakan nama objek pada Music basis data.

Contoh 2 – Dibandingkan dengan Database Saat Ini

Secara default, SQL Server mengasumsikan bahwa nama objek berada dalam konteks database saat ini. Jadi, jika Anda tidak menggunakan nama 3 bagian untuk menentukan objek di database yang berbeda, SQL Server Database Engine hanya akan terlihat di database saat ini.

Ini kode yang sama dari contoh sebelumnya, kecuali kali ini saya menyertakan 1 bagian dan 2 nama bagian. Juga, saya menjalankan kode dua kali:pertama kali dijalankan di Music database, kedua kalinya dijalankan di WideWorldImportersDW basis data:

USE Music;
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];

USE 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:

Changed database context to 'Music'.
+---------------+---------------+---------------+
| 1 Part Name   | 2 Part Name   | 3 Part Name   |
|---------------+---------------+---------------|
| 885578193     | 885578193     | 885578193     |
+---------------+---------------+---------------+
(1 row affected)
Changed database context to 'WideWorldImportersDW'.
+---------------+---------------+---------------+
| 1 Part Name   | 2 Part Name   | 3 Part Name   |
|---------------+---------------+---------------|
| NULL          | NULL          | 885578193     |
+---------------+---------------+---------------+
(1 row affected)

Pada hasil pertama, ketiga kolom mengembalikan ID yang benar. Ini karena database saat ini adalah Music , dan di situlah objek berada.

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.

Jika kedua database memiliki objek lingkup skema yang disebut Artists maka kita mungkin mendapatkan hasil yang berbeda. Dalam kasus seperti itu, akan mudah untuk secara keliru berasumsi bahwa hasilnya benar padahal sebenarnya tidak.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Parsing JSON di TSQL

  2. Gunakan APP_NAME() untuk Mendapatkan Nama Aplikasi dari Sesi Saat Ini di SQL Server

  3. 3 Cara Mengembalikan Daftar Pekerjaan Agen SQL Server (T-SQL)

  4. Bisakah saya menggunakan aliran untuk INSERT atau UPDATE baris di SQL Server (C#)?

  5. Mendapatkan peringatan:Nilai nol dihilangkan dengan operasi SET agregat atau lainnya