Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Unterschied zwischen sys.sql_modules, sys.system_sql_modules und sys.all_sql_modules in SQL Server

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 und sys.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     |
+----------+