sql >> Databasteknik >  >> RDS >> Sqlserver

Skillnaden mellan sys.sql_modules, sys.system_sql_modules och sys.all_sql_modules i SQL Server

I SQL Server är sys.sql_modules , sys.system_sql_modules och sys.all_sql_modules systemkatalogvyer returnerar metadata om SQL-språkdefinierade moduler i SQL Server.

Det finns dock en skillnad mellan dem.

Här är den officiella definitionen av varje vy:

sys.sql_modules
Returnerar en rad för varje objekt som är en SQL-språkdefinierad modul i SQL Server, inklusive inbyggt kompilerad skalär användardefinierad funktion. Objekt av typ P, RF, V, TR, FN, IF, TF och R har en tillhörande SQL-modul. Fristående standardvärden, objekt av typ D, har också en SQL-moduldefinition i den här vyn.
sys.system_sql_modules
Returnerar en rad per systemobjekt som innehåller en SQL-språkdefinierad modul. Systemobjekt av typen FN, IF, P, PC, TF, V har en tillhörande SQL-modul.
sys.all_sql_modules
Returnerar föreningen av sys.sql_modules och sys.system_sql_modules .

Med andra ord, den sista vyn kombinerar resultaten från de två föregående vyn (den returnerar både system och användardefinierade moduler).

Exempel

Här är ett exempel som visar skillnaden i resultat som returneras av dessa vyer.

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;

Resultat:

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

I det här fallet finns det bara 9 användardefinierade moduler i denna databas. Resten är från systemmoduler.

Om vi ​​lägger ihop resultaten av de två första frågorna får vi samma resultat som sys.all_sql_modules :

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

Resultat:

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

  1. Gå med oss ​​för Microsoft Access med SQL Server Academy del II

  2. Drivrutinen kunde inte upprätta en säker anslutning till SQL Server genom att använda Secure Sockets Layer (SSL)-kryptering

  3. ORA-4031-fel med Direct NFS

  4. Infoga stora objektdata i Salesforce.com från SQL Server