In SQL Server die sys.sql_modules
, sys.system_sql_modules
und sys.all_sql_modules
Systemkatalogansichten geben Metadaten zu SQL-sprachdefinierten Modulen in SQL Server zurück.
Es gibt jedoch einen Unterschied zwischen ihnen.
Hier ist die offizielle Definition jeder Ansicht:
sys.sql_modules
- Gibt eine Zeile für jedes Objekt zurück, das ein in der SQL-Sprache definiertes Modul in SQL Server ist, einschließlich nativ kompilierter benutzerdefinierter Skalarfunktionen. Objekte vom Typ P, RF, V, TR, FN, IF, TF und R haben ein zugeordnetes SQL-Modul. Eigenständige Standardobjekte, Objekte vom Typ D, haben in dieser Ansicht ebenfalls eine SQL-Moduldefinition.
sys.system_sql_modules
- Gibt eine Zeile pro Systemobjekt zurück, das ein in der SQL-Sprache definiertes Modul enthält. Systemobjekte vom Typ FN, IF, P, PC, TF, V haben ein zugehöriges SQL-Modul.
sys.all_sql_modules
- Gibt die Vereinigung von
sys.sql_modules
zurück undsys.system_sql_modules
.
Mit anderen Worten, die letzte Ansicht kombiniert die Ergebnisse der beiden vorherigen Ansichten (sie gibt sowohl system als auch zurück benutzerdefinierte Module).
Beispiel
Hier ist ein Beispiel, das den Unterschied in den Ergebnissen zeigt, die von diesen Ansichten zurückgegeben werden.
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;
Ergebnis:
+---------------+ | sql_modules | |---------------| | 9 | +---------------+ (1 row affected) +----------------------+ | system_sql_modules | |----------------------| | 2020 | +----------------------+ (1 row affected) +-------------------+ | all_sql_modules | |-------------------| | 2029 | +-------------------+ (1 row affected)
In diesem Fall gibt es nur 9 benutzerdefinierte Module in dieser Datenbank. Der Rest stammt von Systemmodulen.
Wenn wir die Ergebnisse der ersten beiden Abfragen addieren, erhalten wir dasselbe Ergebnis wie sys.all_sql_modules
:
SELECT (SELECT COUNT(*) FROM sys.sql_modules) + (SELECT COUNT(*) FROM sys.system_sql_modules) AS Result;
Ergebnis:
+----------+ | Result | |----------| | 2029 | +----------+