В SQL Server sys.sql_modules
, sys.system_sql_modules
и sys.all_sql_modules
изгледите на системния каталог връщат метаданни за модули, дефинирани от SQL език в SQL Server.
Между тях обаче има разлика.
Ето официалната дефиниция на всеки изглед:
sys.sql_modules
- Връща ред за всеки обект, който е модул, дефиниран от SQL език в SQL Server, включително собствено компилирана скаларна дефинирана от потребителя функция. Обектите от тип P, RF, V, TR, FN, IF, TF и R имат свързан SQL модул. Самостоятелни стойности по подразбиране, обекти от тип D, също имат дефиниция на SQL модул в този изглед.
sys.system_sql_modules
- Връща един ред на системен обект, който съдържа модул, дефиниран от SQL език. Системните обекти от тип FN, IF, P, PC, TF, V имат свързан SQL модул.
sys.all_sql_modules
- Връща обединението на
sys.sql_modules
иsys.system_sql_modules
.
С други думи, последният изглед комбинира резултатите от предишните два изгледа (връща както системни и потребителски дефинирани модули).
Пример
Ето пример, който демонстрира разликата в резултатите, върнати от тези изгледи.
ИЗПОЛЗВАЙТЕ музика;ИЗБЕРЕТЕ COUNT(*) КАТО sql_modulesFROM sys.sql_modules;ИЗБЕРЕТЕ COUNT(*) КАТО system_sql_modulesFROM sys.system_sql_modules;SELECT COUNT(*) КАТО all_sql_modulesFROM sys.all_sql_modules;Резултат:
+---------------+| sql_modules ||--------------|| 9 |+--------------+(1 ред засегнат)+---------------------+| system_sql_modules ||---------------------|| 2020 |+----------------------+(1 ред засегнат)+------------------ -+| всички_sql_модули ||------------------|| 2029 |+------------------+(1 ред засегнат)В този случай в тази база данни има само 9 модула, дефинирани от потребителя. Останалите са от системни модули.
Ако добавим резултатите от първите две заявки заедно, получаваме същия резултат като
sys.all_sql_modules
:SELECT (SELECT COUNT(*) FROM sys.sql_modules) +(SELECT COUNT(*) FROM sys.system_sql_modules)AS Резултат;Резултат:
+---------+| Резултат ||----------|| 2029 |+----------+