Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Diferença entre sys.sql_modules, sys.system_sql_modules e sys.all_sql_modules no SQL Server


No SQL Server, os sys.sql_modules , sys.system_sql_modules e sys.all_sql_modules as exibições do catálogo do sistema retornam metadados sobre módulos definidos pela linguagem SQL no SQL Server.

No entanto, há uma diferença entre eles.



Aqui está a definição oficial de cada visualização:
sys.sql_modules
Retorna uma linha para cada objeto que é um módulo definido pela linguagem SQL no SQL Server, incluindo a função escalar definida pelo usuário compilada nativamente. Objetos do tipo P, RF, V, TR, FN, IF, TF e R possuem um módulo SQL associado. Padrões autônomos, objetos do tipo D, também têm uma definição de módulo SQL nesta visualização.
sys.system_sql_modules
Retorna uma linha por objeto do sistema que contém um módulo definido pela linguagem SQL. Objetos de sistema do tipo FN, IF, P, PC, TF, V possuem um módulo SQL associado.
sys.all_sql_modules
Retorna a união de sys.sql_modules e sys.system_sql_modules .

Em outras palavras, a última visualização combina os resultados das duas visualizações anteriores (ela retorna o sistema e módulos definidos pelo usuário).

Exemplo


Aqui está um exemplo que demonstra a diferença nos resultados retornados por essas visualizações.
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;

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

Neste caso, existem apenas 9 módulos definidos pelo usuário neste banco de dados. O resto são de módulos do sistema.

Se somarmos os resultados das duas primeiras consultas, obteremos o mesmo resultado que sys.all_sql_modules :
SELECT 
(SELECT COUNT(*) FROM sys.sql_modules) +
(SELECT COUNT(*) FROM sys.system_sql_modules)
AS Result;

Resultado:
+----------+
| Result   |
|----------|
| 2029     |
+----------+