Código de SQL - Información de tablas

Información de tablasgráfica de visualizaciones


SQL

estrellaestrellaestrellaestrellaestrella(7)
Publicado el 17 de Marzo del 2003 por Andres M. Aimaretti
23.396 visualizaciones desde el 17 de Marzo del 2003. Una media de 35 por semana
Es un store procedure que muestra todas las tablas de una base, su espacio reservado, espacio usado por datos, espacio usado por indices y espacio libre.

Versión 1
estrellaestrellaestrellaestrellaestrella(7)

Publicado el 17 de Marzo del 2003gráfica de visualizaciones de la versión: Versión 1
23.397 visualizaciones desde el 17 de Marzo del 2003. Una media de 35 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
If Exists (Select * from sysobjects where id = object_id('dbo._trace_spGetTableInfo')
   and sysstat & 0xf = 4)
   Drop Proc dbo._trace_spGetTableInfo
Go
 
CREATE PROC dbo._trace_spGetTableInfo
/********************************************************************
* Description: Returns number of rows and disk usage for all tables
*
********************************************************************
* Parameter Name        Description
* --------------------- ------------------------
* @SortOrder            The sort order for the output ('name', 'size')
********************************************************************/
@SortOrder        nvarchar(4) = NULL
AS
BEGIN
SET NOCOUNT ON
  Declare   @nvcTblNm      nvarchar(513),
            @siUID         smallint     ,
            @nvcUserNm     nvarchar(256),
            @iObjectID     int          ,
            @iPages        int          ,
            @nvcSortCol    nvarchar(255),
            @nvcSQL        nvarchar(2048)
 
  If @SortOrder IS NOT NULL
  Begin
    Select @SortOrder = lower(@SortOrder)
    If @SortOrder Not In ('name', 'size')
    Begin
      Raiserror ('Please specify name, size, or NULL for the @SortOrder parameter.', 16, 1)
      Return 1
    End
    Else
    Begin
      If @SortOrder = 'size'
      Begin
        Select @nvcSortCol = 'reserved desc'
      End
      Else
      Begin
        Select @nvcSortCol = 'name'
      End
    End
  End
  Else
  Begin
    Select @nvcSortCol = 'name'
  End
 
  Create Table #TableInfo
  (
    rows        int           null,
    reserved    dec(15)       null,
    data        dec(15)       null,
    indexp      dec(15)       null,
    unused      dec(15)       null
  )
 
  Create Table #AllTableInfo
  (
    name        nvarchar(64)  null,
    rows        int           null,
    reserved    int           null,
    data        int           null,
    indexp      int           null,
    unused      int           null
  )
 
  Declare   curTables Cursor For
  Select    uid ,
            name
  From      sysobjects
  Where     type = 'U'
  and       name not like '_trace_%'
  Order By  name
  FOR       READ ONLY
 
  Open curTables
 
  Fetch Next From curTables
  into @siUID, @nvcTblNm
 
  While @@FETCH_STATUS = 0
  Begin
    -- Remove rows from temp table
    Delete From #TableInfo
 
    -- Get the user name
    Select @nvcUserNm = user_name(@siUID)
    If @nvcUserNm != NULL
    Begin
      Select @nvcTblNm = @nvcUserNm + '.' + @nvcTblNm
    End
 
    -- Get the object id
    Select @iObjectID = object_id(@nvcTblNm)
    Insert Into #TableInfo (reserved)
 
    Select sum(reserved)
    From   sysindexes
    Where  indid in (0, 1, 255)
    and    id     = @iObjectID
 
    Select @iPages = sum(dpages)
    From   sysindexes
    Where  indid < 2
    and    id    = @iObjectID
 
    Select @iPages = @iPages + isnull(sum(used), 0)
    From   sysindexes
    Where  indid = 255
    and    id = @iObjectID
 
    Update #TableInfo
    Set    data = @iPages
 
    Update #TableInfo
    Set    indexp = (
      Select sum(used)
      From   sysindexes
      where  indid in (0, 1, 255)
      and    id = @iObjectID ) - data
 
    Update #TableInfo
    Set    unused = reserved - (
      Select sum(used)
      From   sysindexes
      Where  indid in (0, 1, 255)
      and id = @iObjectID )
 
    Update #TableInfo
    Set    rows = i.rows
    From   sysindexes i
    Where  i.indid < 2
    and    i.id = @iObjectID
 
    Insert Into #AllTableInfo
    Select name     = object_name(@iObjectID)       ,
           rows = rows,
           reserved = round(reserved * d.low / 1024.,0,0),
           data     = round(data * d.low / 1024.,0,0),
           indexp   = round(indexp * d.low / 1024.,0,0),
           unused   = round(unused * d.low / 1024.,0,0)
    From   #TableInfo, master.dbo.spt_values d
    Where  d.number = 1
    and    d.type = 'E'
 
    Fetch Next From curTables
    into @siUID, @nvcTblNm
  End
 
  Select @nvcSQL = N'
  Select [Name]            = name,
         [Rows]            = rows,
         [Reserved (KB)]   = reserved,
         [Total Used (KB)] = data + indexp,
         [Data (KB)]       = data,
         [Index Size (KB)] = indexp,
         [Unused (KB)]     = unused
  From   #AllTableInfo
  Order By ' + @nvcSortCol
 
  Exec sp_executesql @nvcSQL
 
  Close curTables
  Deallocate curTables
 
  Drop Table #TableInfo
  Drop Table #AllTableInfo
 
  Return 0
END



Comentarios sobre la versión: Versión 1 (7)

Juan Carlo Mendizabal
18 de Marzo del 2003
estrellaestrellaestrellaestrellaestrella
Exelente !
Responder
Felipe Chang
17 de Junio del 2003
estrellaestrellaestrellaestrellaestrella
Pero adicionalmente en los comentarios debnerian de especificar para que Base de Datos aplica, DQL Server, Oracle, Mysql, etc...
Responder
Karin Moya
09 de Septiembre del 2003
estrellaestrellaestrellaestrellaestrella
Hola lo probe en una base SQL Server... y no funciono con todas las tablas, falla en las que han sido creadas por usuarios distintos al DBO.
Responder
Jose Luis
23 de Diciembre del 2003
estrellaestrellaestrellaestrellaestrella
como puedo seleccionar un registro de un grind y que me mande a otro
formulario
Responder
rodro
20 de Septiembre del 2004
estrellaestrellaestrellaestrellaestrella
No funciona correctamente. No es capaz de ofrecer los datos de aquellas tablas que tienen dado el permiso "SELECT" para el usuario / rol public.
Responder
Alvaro Ortiz
25 de Agosto del 2005
estrellaestrellaestrellaestrellaestrella
Muy útil su script........funcionó a la primera.
Responder
Jasvier
30 de Diciembre del 2009
estrellaestrellaestrellaestrellaestrella
Felicidades amigo Andrés magnifico aporte a la comunidad de programadores.
Felicidades y tu código esta excelente
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s558