Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разлика между sys.sql_modules, sys.system_sql_modules и sys.all_sql_modules в SQL Server

В 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 |+----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Кое е по-бързо КОАЛЕССИРАНЕ ИЛИ ИЗКЛЮЧВАНЕ?

  2. CAST() срещу TRY_CAST() в SQL Server:Каква е разликата?

  3. Инсталиране и конфигуриране на SQL Server Log Shipping &Disaster Recovery -4

  4. Как да изпълня GROUP BY на колона с псевдоним в MS-SQL Server?

  5. Какво SqlDbType се съпоставя с varBinary(max)?