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
ysys.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 | +----------+