sql >> Database >  >> RDS >> Sqlserver

Verschil tussen sys.sql_modules, sys.system_sql_modules en sys.all_sql_modules in SQL Server

In SQL Server de sys.sql_modules , sys.system_sql_modules , en sys.all_sql_modules systeemcatalogusweergaven retourneren metagegevens over in SQL-taal gedefinieerde modules in SQL Server.

Er is echter een verschil tussen hen.

Hier is de officiële definitie van elke weergave:

sys.sql_modules
Retourneert een rij voor elk object dat een SQL-taalgedefinieerde module in SQL Server is, inclusief native gecompileerde scalaire, door de gebruiker gedefinieerde functie. Objecten van het type P, RF, V, TR, FN, IF, TF en R hebben een bijbehorende SQL-module. Stand-alone standaarden, objecten van het type D, hebben ook een SQL-moduledefinitie in deze weergave.
sys.system_sql_modules
Retourneert één rij per systeemobject dat een in de SQL-taal gedefinieerde module bevat. Systeemobjecten van het type FN, IF, P, PC, TF, V hebben een bijbehorende SQL-module.
sys.all_sql_modules
Retourneert de unie van sys.sql_modules en sys.system_sql_modules .

Met andere woorden, de laatste weergave combineert de resultaten van de vorige twee weergaven (het retourneert zowel systeem en door de gebruiker gedefinieerde modules).

Voorbeeld

Hier is een voorbeeld dat het verschil in resultaten van deze weergaven laat zien.

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;

Resultaat:

+---------------+
| sql_modules   |
|---------------|
| 9             |
+---------------+
(1 row affected)
+----------------------+
| system_sql_modules   |
|----------------------|
| 2020                 |
+----------------------+
(1 row affected)
+-------------------+
| all_sql_modules   |
|-------------------|
| 2029              |
+-------------------+
(1 row affected)

In dit geval zijn er slechts 9 door de gebruiker gedefinieerde modules in deze database. De rest is van systeemmodules.

Als we de resultaten van de eerste twee queries bij elkaar optellen, krijgen we hetzelfde resultaat als sys.all_sql_modules :

SELECT 
(SELECT COUNT(*) FROM sys.sql_modules) +
(SELECT COUNT(*) FROM sys.system_sql_modules)
AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| 2029     |
+----------+

  1. Opgeslagen procedure en machtigingen - Is UITVOEREN voldoende?

  2. Unicode-tekens vervangen in PostgreSQL

  3. Dichtstbijzijnde match, deel 1

  4. 2 functies om het jaar uit een datum in Oracle te halen