I SQL Server er sys.sql_modules
, sys.system_sql_modules
, og sys.all_sql_modules
systemkatalogvisninger returnerer metadata om SQL-sprogdefinerede moduler i SQL Server.
Der er dog forskel på dem.
Her er den officielle definition af hver visning:
sys.sql_modules
- Returnerer en række for hvert objekt, der er et SQL-sprogdefineret modul i SQL Server, inklusive indbygget kompileret skalær brugerdefineret funktion. Objekter af typen P, RF, V, TR, FN, IF, TF og R har et tilknyttet SQL-modul. Stand-alone standarder, objekter af type D, har også en SQL-moduldefinition i denne visning.
sys.system_sql_modules
- Returnerer én række pr. systemobjekt, der indeholder et SQL-sprogdefineret modul. Systemobjekter af typen FN, IF, P, PC, TF, V har et tilknyttet SQL-modul.
sys.all_sql_modules
- Returnerer foreningen af
sys.sql_modules
ogsys.system_sql_modules
.
Med andre ord, den sidste visning kombinerer resultaterne af de to foregående visninger (den returnerer både system og brugerdefinerede moduler).
Eksempel
Her er et eksempel, der viser forskellen i resultater, der returneres af disse visninger.
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 dette tilfælde er der kun 9 brugerdefinerede moduler i denne database. Resten er fra systemmoduler.
Hvis vi lægger resultaterne af de to første forespørgsler sammen, får vi det samme 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 | +----------+