V SQL Server sys.sql_modules
, sys.system_sql_modules
a sys.all_sql_modules
zobrazení systémového katalogu vracejí metadata o modulech definovaných jazykem SQL na serveru SQL Server.
Mezi nimi je však rozdíl.
Zde je oficiální definice každého zobrazení:
sys.sql_modules
- Vrátí řádek pro každý objekt, který je modulem definovaným jazykem SQL na serveru SQL Server, včetně nativně zkompilované skalární uživatelsky definované funkce. Objekty typu P, RF, V, TR, FN, IF, TF a R mají přidružený modul SQL. Samostatné výchozí hodnoty, objekty typu D, mají v tomto pohledu také definici modulu SQL.
sys.system_sql_modules
- Vrátí jeden řádek na systémový objekt, který obsahuje modul definovaný jazykem SQL. Systémové objekty typu FN, IF, P, PC, TF, V mají přidružený SQL modul.
sys.all_sql_modules
- Vrátí spojení
sys.sql_modules
asys.system_sql_modules
.
Jinými slovy, poslední pohled kombinuje výsledky předchozích dvou pohledů (vrací systémové a uživatelsky definované moduly).
Příklad
Zde je příklad, který ukazuje rozdíl ve výsledcích vrácených těmito zobrazeními.
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;
Výsledek:
+---------------+ | sql_modules | |---------------| | 9 | +---------------+ (1 row affected) +----------------------+ | system_sql_modules | |----------------------| | 2020 | +----------------------+ (1 row affected) +-------------------+ | all_sql_modules | |-------------------| | 2029 | +-------------------+ (1 row affected)
V tomto případě je v této databázi pouze 9 uživatelsky definovaných modulů. Zbytek je ze systémových modulů.
Pokud sečteme výsledky prvních dvou dotazů dohromady, dostaneme stejný výsledek jako sys.all_sql_modules
:
SELECT (SELECT COUNT(*) FROM sys.sql_modules) + (SELECT COUNT(*) FROM sys.system_sql_modules) AS Result;
Výsledek:
+----------+ | Result | |----------| | 2029 | +----------+