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

Perbedaan Antara sys.objects, sys.system_objects, dan sys.all_objects di SQL Server

Jika Anda telah menggunakan T-SQL untuk sementara waktu, kemungkinan Anda menemukan sys.objects tampilan katalog sistem, yang mengembalikan objek cakupan skema yang ditentukan pengguna dalam database.

Tetapi ada dua pandangan serupa lainnya yang mungkin Anda sadari atau tidak; sys.system_objects dan sys.all_objects .

Meskipun serupa, perbedaannya jelas, dan namanya membedakannya. Berikut definisi resmi dari ketiga tampilan tersebut:

sys.objects
Berisi baris untuk setiap objek cakupan skema yang ditentukan pengguna yang dibuat dalam database.
sys.system_objects
Berisi satu baris untuk semua objek sistem cakupan skema yang disertakan dengan SQL Server.
sys.all_objects
Menampilkan UNION dari semua objek buatan pengguna dan objek sistem cakupan skema.

Dengan kata lain, tampilan terakhir menggabungkan hasil dari dua tampilan sebelumnya (mengembalikan kedua sistem dan objek yang ditentukan pengguna).

Contoh

Berikut adalah contoh yang menunjukkan perbedaan hasil yang ditampilkan oleh tampilan ini.

USE WideWorldImportersDW;

SELECT COUNT(*) AS [sys.objects]
FROM sys.objects;

SELECT COUNT(*) AS [sys.system_objects]
FROM sys.system_objects;

SELECT COUNT(*) AS [sys.all_objects]
FROM sys.all_objects;

SELECT 
  (SELECT COUNT(*) AS [sys.all_objects] FROM sys.all_objects) - 
  (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) 
AS [sys.all_objects MINUS sys.system_objects];

Hasil:

+---------------+
| sys.objects   |
|---------------|
| 224           |
+---------------+
(1 row affected)
+----------------------+
| sys.system_objects   |
|----------------------|
| 2205                 |
+----------------------+
(1 row affected)
+-------------------+
| sys.all_objects   |
|-------------------|
| 2429              |
+-------------------+
(1 row affected)

Tampilan ini mengembalikan terlalu banyak baris bagi saya untuk dicantumkan di sini, jadi saya menggunakan COUNT() untuk mengembalikan jumlah baris yang dikembalikan masing-masing.

Jika Anda pandai matematika, Anda akan segera melihat bahwa hitungan sys.all_objects adalah jumlah dari sys.objects dan sys.system_objects .

Berikut kueri yang melakukan penambahan tersebut.

SELECT 
  (SELECT COUNT(*) AS [sys.objects] FROM sys.objects) + 
  (SELECT COUNT(*) AS [sys.system_objects] FROM sys.system_objects) 
AS [sys.objects PLUS sys.system_objects];

Hasil:

+---------------------------------------+
| sys.objects PLUS sys.system_objects   |
|---------------------------------------|
| 2429                                  |
+---------------------------------------+

Perhatikan bahwa visibilitas metadata dalam tampilan katalog terbatas pada keamanan yang dimiliki oleh pengguna atau yang telah diberikan izin kepada pengguna.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kesalahan saat memasukkan ke dalam tabel yang memiliki alih-alih pemicu dari kerangka data entitas

  2. Tips untuk Memindahkan Database SQL Server dari Satu Server ke Server Lain - Tutorial SQL oleh Rajan Singh

  3. Simpan byte[] ke dalam database SQL Server dari C#

  4. SQL Server:Perbedaan antara PARTITION BY dan GROUP BY

  5. Jalankan perintah Sisipkan dan kembalikan Id yang dimasukkan di Sql