Advertisement
nmg196

GetTableSpaceUsed

Nov 16th, 2012
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.02 KB | None | 0 0
  1.  
  2. /****** Object:  StoredProcedure [dbo].[xspGetTableSpaceUsed]    Script Date: 16/11/2012 09:35:44 ******/
  3. SET ANSI_NULLS ON
  4. GO
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7. ALTER PROCEDURE [dbo].[xspGetTableSpaceUsed]
  8. AS
  9. BEGIN
  10.     SET NOCOUNT ON      
  11.  
  12.     DBCC UPDATEUSAGE(0)
  13.  
  14.     CREATE TABLE #t
  15.     (
  16.         id INT,
  17.         TableName VARCHAR(100),
  18.         NRows INT,
  19.         Reserved FLOAT,
  20.         TableSize FLOAT,
  21.         IndexSize FLOAT,
  22.         FreeSpace FLOAT
  23.     )
  24.  
  25.     INSERT #t EXEC  sp_msForEachTable 'SELECT
  26.        OBJECT_ID(PARSENAME(''?'',1)),
  27.        PARSENAME(''?'',1),
  28.        COUNT(*),0,0,0,0 FROM ?'
  29.  
  30.     DECLARE @low INT
  31.  
  32.     SELECT @low = [low] FROM master.dbo.spt_values
  33.         WHERE number = 1
  34.         AND type = 'E'
  35.  
  36.     UPDATE #t SET Reserved = x.r, IndexSize = x.i FROM
  37.         (SELECT id, r = SUM(si.reserved), i = SUM(si.used)
  38.         FROM sysindexes si
  39.         WHERE si.indid IN (0, 1, 255)
  40.         GROUP BY id) x
  41.         WHERE x.id = #t.id
  42.  
  43.     UPDATE #t SET TableSize = (SELECT SUM(si.dpages)
  44.         FROM sysindexes si
  45.         WHERE si.indid < 2
  46.         AND si.id = #t.id)
  47.  
  48.     UPDATE #t SET TableSize = TableSize +
  49.         (SELECT COALESCE(SUM(used), 0)
  50.         FROM sysindexes si
  51.         WHERE si.indid = 255
  52.         AND si.id = #t.id)
  53.  
  54.     UPDATE #t SET FreeSpace = Reserved - IndexSize
  55.  
  56.     UPDATE #t SET IndexSize = IndexSize - TableSize
  57.  
  58.     SELECT
  59.         TableName,
  60.         nrows as NumRows,
  61.         Reserved2 = LTRIM(STR(
  62.             reserved * @low / 1024.,15,0) +
  63.             ' ' + 'KB'),
  64.         DataSize = LTRIM(STR(
  65.             tablesize * @low / 1024.,15,0) +
  66.             ' ' + 'KB'),
  67.         IndexSize = LTRIM(STR(
  68.             indexSize * @low / 1024.,15,0) +
  69.             ' ' + 'KB'),
  70.         FreeSpace = LTRIM(STR(
  71.             freeSpace * @low / 1024.,15,0) +
  72.             ' ' + 'KB')
  73.         FROM #t
  74.         ORDER BY reserved desc
  75.         --ORDER BY TableName
  76.  
  77.     DROP TABLE #t
  78. END
  79.  
  80. go
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement