I SQL Server är sys.sql_modules
, sys.system_sql_modules
och sys.all_sql_modules
systemkatalogvyer returnerar metadata om SQL-språkdefinierade moduler i SQL Server.
Det finns dock en skillnad mellan dem.
Här är den officiella definitionen av varje vy:
sys.sql_modules
- Returnerar en rad för varje objekt som är en SQL-språkdefinierad modul i SQL Server, inklusive inbyggt kompilerad skalär användardefinierad funktion. Objekt av typ P, RF, V, TR, FN, IF, TF och R har en tillhörande SQL-modul. Fristående standardvärden, objekt av typ D, har också en SQL-moduldefinition i den här vyn.
sys.system_sql_modules
- Returnerar en rad per systemobjekt som innehåller en SQL-språkdefinierad modul. Systemobjekt av typen FN, IF, P, PC, TF, V har en tillhörande SQL-modul.
sys.all_sql_modules
- Returnerar föreningen av
sys.sql_modules
ochsys.system_sql_modules
.
Med andra ord, den sista vyn kombinerar resultaten från de två föregående vyn (den returnerar både system och användardefinierade moduler).
Exempel
Här är ett exempel som visar skillnaden i resultat som returneras av dessa vyer.
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;
Resultat:
+---------------+ | sql_modules | |---------------| | 9 | +---------------+ (1 row affected) +----------------------+ | system_sql_modules | |----------------------| | 2020 | +----------------------+ (1 row affected) +-------------------+ | all_sql_modules | |-------------------| | 2029 | +-------------------+ (1 row affected)
I det här fallet finns det bara 9 användardefinierade moduler i denna databas. Resten är från systemmoduler.
Om vi lägger ihop resultaten av de två första frågorna får vi samma resultat som sys.all_sql_modules
:
SELECT (SELECT COUNT(*) FROM sys.sql_modules) + (SELECT COUNT(*) FROM sys.system_sql_modules) AS Result;
Resultat:
+----------+ | Result | |----------| | 2029 | +----------+