sql >> Base de Datos >  >> RDS >> Sqlserver

Diferencia entre sys.sql_modules, sys.system_sql_modules y sys.all_sql_modules en SQL Server

En SQL Server los sys.sql_modules , sys.system_sql_modules y sys.all_sql_modules las vistas del catálogo del sistema devuelven metadatos sobre los módulos definidos en el lenguaje SQL en SQL Server.

Sin embargo, hay una diferencia entre ellos.

Esta es la definición oficial de cada vista:

sys.sql_modules
Devuelve una fila para cada objeto que es un módulo definido en lenguaje SQL en SQL Server, incluida la función definida por el usuario escalar compilada de forma nativa. Los objetos de tipo P, RF, V, TR, FN, IF, TF y R tienen un módulo SQL asociado. Los valores predeterminados independientes, los objetos de tipo D, también tienen una definición de módulo SQL en esta vista.
sys.system_sql_modules
Devuelve una fila por objeto del sistema que contiene un módulo definido en lenguaje SQL. Los objetos de sistema de tipo FN, IF, P, PC, TF, V tienen un módulo SQL asociado.
sys.all_sql_modules
Devuelve la unión de sys.sql_modules y sys.system_sql_modules .

En otras palabras, la última vista combina los resultados de las dos vistas anteriores (devuelve tanto el sistema y módulos definidos por el usuario).

Ejemplo

Este es un ejemplo que demuestra la diferencia en los resultados devueltos por estas vistas.

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)

En este caso, solo hay 9 módulos definidos por el usuario en esta base de datos. El resto son de módulos del sistema.

Si sumamos los resultados de las dos primeras consultas, obtenemos el mismo 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     |
+----------+