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
isys.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 | +----------+