sql >> Databáze >  >> RDS >> Sqlserver

Rozdíl mezi sys.sql_modules, sys.system_sql_modules a sys.all_sql_modules v SQL Server

V SQL Server sys.sql_modules , sys.system_sql_modules a sys.all_sql_modules zobrazení systémového katalogu vracejí metadata o modulech definovaných jazykem SQL na serveru SQL Server.

Mezi nimi je však rozdíl.

Zde je oficiální definice každého zobrazení:

sys.sql_modules
Vrátí řádek pro každý objekt, který je modulem definovaným jazykem SQL na serveru SQL Server, včetně nativně zkompilované skalární uživatelsky definované funkce. Objekty typu P, RF, V, TR, FN, IF, TF a R mají přidružený modul SQL. Samostatné výchozí hodnoty, objekty typu D, mají v tomto pohledu také definici modulu SQL.
sys.system_sql_modules
Vrátí jeden řádek na systémový objekt, který obsahuje modul definovaný jazykem SQL. Systémové objekty typu FN, IF, P, PC, TF, V mají přidružený SQL modul.
sys.all_sql_modules
Vrátí spojení sys.sql_modules a sys.system_sql_modules .

Jinými slovy, poslední pohled kombinuje výsledky předchozích dvou pohledů (vrací systémové a uživatelsky definované moduly).

Příklad

Zde je příklad, který ukazuje rozdíl ve výsledcích vrácených těmito zobrazeními.

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;

Výsledek:

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

V tomto případě je v této databázi pouze 9 uživatelsky definovaných modulů. Zbytek je ze systémových modulů.

Pokud sečteme výsledky prvních dvou dotazů dohromady, dostaneme stejný výsledek jako sys.all_sql_modules :

SELECT 
(SELECT COUNT(*) FROM sys.sql_modules) +
(SELECT COUNT(*) FROM sys.system_sql_modules)
AS Result;

Výsledek:

+----------+
| Result   |
|----------|
| 2029     |
+----------+

  1. Vygenerujte třídu z databázové tabulky

  2. Jak drahé jsou implicitní konverze na straně sloupců?

  3. Jak porovnat dva databázové objekty v Oracle?

  4. Jak selhat nebo havarovat vaše instance MySQL pro testování