Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Różnica między sys.sql_modules, sys.system_sql_modules i sys.all_sql_modules w SQL Server

W SQL Server sys.sql_modules , sys.system_sql_modules i sys.all_sql_modules Widoki katalogu systemowego zwracają metadane dotyczące modułów zdefiniowanych w języku SQL w SQL Server.

Jest jednak między nimi różnica.

Oto oficjalna definicja każdego widoku:

sys.sql_modules
Zwraca wiersz dla każdego obiektu, który jest modułem zdefiniowanym w języku SQL w programie SQL Server, w tym natywnie skompilowaną skalarną funkcją zdefiniowaną przez użytkownika. Obiekty typu P, RF, V, TR, FN, IF, TF i R mają skojarzony moduł SQL. Samodzielne wartości domyślne, obiekty typu D, również mają w tym widoku definicję modułu SQL.
sys.system_sql_modules
Zwraca jeden wiersz na obiekt systemowy, który zawiera moduł zdefiniowany w języku SQL. Obiekty systemowe typu FN, IF, P, PC, TF, V mają powiązany moduł SQL.
sys.all_sql_modules
Zwraca unię sys.sql_modules i sys.system_sql_modules .

Innymi słowy, ostatni widok łączy wyniki dwóch poprzednich widoków (zwraca zarówno systemowe i moduły zdefiniowane przez użytkownika).

Przykład

Oto przykład, który pokazuje różnicę w wynikach zwracanych przez te widoki.

USE Music;

SELECT COUNT(*) AS sql_modules
FROM sys.sql_modules;

SELECT COUNT(*) AS system_sql_modules
FROM sys.system_sql_modules;

SELECT COUNT(*) AS all_sql_modules
FROM sys.all_sql_modules;

Wynik:

+---------------+
| sql_modules   |
|---------------|
| 9             |
+---------------+
(1 row affected)
+----------------------+
| system_sql_modules   |
|----------------------|
| 2020                 |
+----------------------+
(1 row affected)
+-------------------+
| all_sql_modules   |
|-------------------|
| 2029              |
+-------------------+
(1 row affected)

W tym przypadku w tej bazie danych jest tylko 9 modułów zdefiniowanych przez użytkownika. Reszta pochodzi z modułów systemowych.

Jeśli dodamy wyniki dwóch pierwszych zapytań razem, otrzymamy ten sam wynik, co sys.all_sql_modules :

SELECT 
(SELECT COUNT(*) FROM sys.sql_modules) +
(SELECT COUNT(*) FROM sys.system_sql_modules)
AS Result;

Wynik:

+----------+
| Result   |
|----------|
| 2029     |
+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz profil poczty bazy danych w programie SQL Server (T-SQL)

  2. Importuj/eksportuj bazę danych za pomocą SQL Server Server Management Studio

  3. Upuść wszystkie tabele, procedury składowane, wyzwalacze, ograniczenia i wszystkie zależności w jednej instrukcji sql

  4. Statystyki użycia procesora w bazach danych SQL Server

  5. Szybko wstawiaj 2 miliony wierszy do SQL Server