25. april 2004 - 11:15Der er
7 kommentarer og 1 løsning
Vise totale antal MB vha. stored procedure
Jeg har følgende stored procedure som lister op alle tabeller i databasen sammen med størelsen på hver enkel tabel.
Hvordan ændrer jeg denne kode så den også sumerer op størrelsen på alle tabeller og kommer med en total størelse for alle tabeller til sammen?
BEGIN IF @top > 0 SET ROWCOUNT @top
SELECT [Table Name], (SELECT rows FROM sysindexes s WHERE s.indid < 2 AND s.id = OBJECT_ID(a.[Table Name])) AS [Row count], [Total space used (MB)] FROM ( SELECT QUOTENAME(USER_NAME(o.uid)) + '.' + QUOTENAME(OBJECT_NAME(i.id)) AS [Table Name], CONVERT(numeric(15,2),(((CONVERT(numeric(15,2),SUM(i.reserved)) * (SELECT low FROM master.dbo.spt_values (NOLOCK) WHERE number = 1 AND type = 'E')) / 1024.)/1024.)) AS [Total space used (MB)] FROM sysindexes i (NOLOCK) INNER JOIN sysobjects o (NOLOCK) ON i.id = o.id AND ((@include_system_tables = 1 AND o.type IN ('U', 'S')) OR o.type = 'U') AND ((@include_system_tables = 1)OR (OBJECTPROPERTY(i.id, 'IsMSShipped') = 0)) WHERE indid IN (0, 1, 255) GROUP BY QUOTENAME(USER_NAME(o.uid)) + '.' + QUOTENAME(OBJECT_NAME(i.id))
Husk at hvis du benytter informationerne i sysindexes at kører en DBCC UPDATEUSAGE eller sp_spaceused @updateusage = true først. Ellers risikere du at få unøjagtige resultater.
Hvis du gerne vil have en total sum over alle objeckter kan du gøre det ved hjælp af en COMPUTE BY SUM([Total space used (MB)]) - hvor [Total space used (MB)] er det SQL udtryk du bruger til at udtrække pladsforbrug for de enkelte objekter.
Husk do at i ADO vil din COMPUTE BY virke som et nyt resultat sæt - du skal altså læse begge resultat ind ..
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.