schangxiang@126.com
2025-09-02 8b3046790fd09138da072edd4ef48fdeb16e1879
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
-- =============================================
-- Description: <Éú³ÉÊý¾Ý¿â×Öµä>
-- =============================================
 
SET NOCOUNT ON;
/*
*Êä³öÍ·²¿ÐÅÏ¢
*/
PRINT '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
PRINT '<html xmlns="http://www.w3.org/1999/xhtml">';
PRINT ' <head>';
PRINT ' <title>Êý¾Ý¿â×Öµä</title>';
PRINT ' <style type="text/css">';
PRINT ' body{margin:0;cursor:default;font-family: Arial, Helvetica, sans-serif, "΢ÈíÑźÚ" , "ËÎÌå";}';
PRINT ' .tableBox{margin:10px auto; padding:0px; width:1200px; height:auto; background:#EAEFF3; border:1px solid #45360A; margin-top:50px;}';
PRINT ' .tableBox h3 {font-size:12pt; height:30px; line-height:30px; background:#460B6A; padding:0px 0px 0px 15px; color:#FFF; margin:0px; text-align:left }';
PRINT ' .tableBox table {width:1200px; padding:0px }';
PRINT ' .tableBox th {height:25px; border-top:1px solid #FFF; border-left:1px solid #FFF; background:#C0DBF7; font-size:14px; }';
PRINT ' .tableBox td {font-size: 12px;height:25px; padding-left:10px; border-top:1px solid #FFF; border-left:1px solid #FFF; }';
PRINT ' .tableBox tr:hover { background:#C0DBF7; } ';
PRINT ' .tableBox .field{font-weight:bold;color:#276926;}';
PRINT ' </style>';
PRINT ' </head>';
PRINT ' <body>';
PRINT '<div style="text-align:center;"><h2>' + DB_NAME()
    + ' Êý¾Ý¿â×Öµä</h2></br><font style="color:gray;">Éú³ÉÓÚ£º'
    + CONVERT(VARCHAR, GETDATE(), 120) + '</font></div></br>';
 
/*
*Êý¾Ý¿â²Ëµ¥Áбí
*/
--Êý¾Ý¿â±í
DECLARE @tableDBTABLE TABLE
    (
      id INT IDENTITY(1, 1)
             PRIMARY KEY ,
      tableName NVARCHAR(300)
    );
 
 
INSERT  INTO @tableDBTABLE
        ( tableName
        )
        SELECT DISTINCT
                TABLE_NAME AS tableName
        FROM    INFORMATION_SCHEMA.COLUMNS
        WHERE   ( SELECT    COUNT(*)
                  FROM      sys.tables AS tbl
                            INNER JOIN sys.all_columns AS clmns ON clmns.object_id = tbl.object_id
                            LEFT OUTER JOIN sys.indexes AS idx ON idx.object_id = clmns.object_id
                                                              AND 1 = idx.is_primary_key
                            LEFT OUTER JOIN sys.index_columns AS idxcol ON idxcol.index_id = idx.index_id
                                                              AND idxcol.column_id = clmns.column_id
                                                              AND idxcol.object_id = clmns.object_id
                                                              AND 0 = idxcol.is_included_column
                            LEFT OUTER JOIN sys.types AS udt ON udt.user_type_id = clmns.user_type_id
                            LEFT OUTER JOIN sys.types AS typ ON typ.user_type_id = clmns.system_type_id
                                                              AND typ.user_type_id = typ.system_type_id
                            LEFT JOIN sys.default_constraints AS cnstr ON cnstr.object_id = clmns.default_object_id
                            LEFT OUTER JOIN sys.extended_properties exprop ON exprop.major_id = clmns.object_id
                                                              AND exprop.minor_id = clmns.column_id
                                                              AND exprop.name = 'MS_Description'
                  WHERE     ( tbl.name = TABLE_NAME
                              -- AND exprop.class = 1
                            )
                ) > 0
        ORDER BY TABLE_NAME;
 
--Êä³ö±íĿ¼ÐÅÏ¢
DECLARE @tname_cur VARCHAR(200);
DECLARE @count_t1 INT;
DECLARE @i_t1 INT;
DECLARE @i_t2 INT;
 
DECLARE @×Ö¶ÎÃû³Æ VARCHAR(200);
DECLARE @ÀàÐÍ VARCHAR(200);
DECLARE @³¤¶È VARCHAR(200);
DECLARE @ÊýÖµ¾«¶È VARCHAR(200);
DECLARE @СÊýλÊý VARCHAR(200);
DECLARE @ĬÈÏÖµ VARCHAR(200);
DECLARE @ÔÊÐíΪ¿Õ VARCHAR(200);
DECLARE @Íâ¼ü VARCHAR(200);
DECLARE @Ö÷¼ü VARCHAR(200);
DECLARE @ÃèÊö VARCHAR(4000);
 
--³õʼ»¯Öµ
SET @i_t1 = 1;
SET @i_t2 = 1;
SELECT  @count_t1 = COUNT(*)
FROM    @tableDBTABLE;
 
 
IF @count_t1 > 0
    BEGIN
        PRINT '<div style="text-align:left; margin:20px 0px 50px 50px;"> Ä¿Â¼£º<br><ol>'; 
        WHILE @i_t1 <= @count_t1
            BEGIN
                SELECT  @tname_cur = tableName
                FROM    @tableDBTABLE
                WHERE   id = @i_t1;
                PRINT '<li><a href="#' + @tname_cur + '">±í£º' + @tname_cur
                    + '</a></li>';
                SET @i_t1 = @i_t1 + 1;
            END;
        PRINT '</ol></div>';
    END;
--Êä³ö±íÐÐÐÅÏ¢
IF @count_t1 > 0
    BEGIN
        SET @i_t1 = 1; 
        WHILE @i_t1 <= @count_t1
            BEGIN 
                SELECT  @tname_cur = tableName
                FROM    @tableDBTABLE
                WHERE   id = @i_t1;
 
                DECLARE @tabledesc NVARCHAR(4000);--±íÃèÊö
                SELECT  @tabledesc = CAST(value AS VARCHAR(4000))
                FROM    sys.extended_properties AS A
                WHERE   A.major_id = OBJECT_ID(@tname_cur)
                        AND name = 'MS_Description'
                        --AND minor_id = 0;
                SET @tabledesc = CASE WHEN ( @tabledesc IS NULL
                                             OR LEN(RTRIM(LTRIM(@tabledesc))) <= 0
                                           ) THEN ' '
                                      ELSE ' : ' + @tabledesc
                                 END; 
 
--Êä³ö±íÍ·²¿ÐÅÏ¢
                PRINT ' <div class="tableBox">'; 
                PRINT '<a name="' + @tname_cur + '"></a>'; 
                PRINT ' <h3>' + CAST(@i_t1 AS VARCHAR(10)) + '.' + @tname_cur
                    + ' ±í ' + @tabledesc + '</h3>'; 
                PRINT ''; 
 
                PRINT ' <table cellspacing="0">';
                PRINT ' <tr>';
                PRINT ' <th>ÐòºÅ</th>';
                PRINT ' <th>×Ö¶ÎÃû³Æ</th>';
                PRINT ' <th>ÀàÐÍ</th>';
                PRINT ' <th>³¤¶È</th>';
                PRINT ' <th>ÊýÖµ¾«¶È</th>';
                PRINT ' <th>СÊýλÊý</th>';
                PRINT ' <th>ĬÈÏÖµ</th>';
                PRINT ' <th>ÔÊÐíΪ¿Õ</th>';
                PRINT ' <th>Íâ¼ü</th>';
                PRINT ' <th>Ö÷¼ü</th>';
                PRINT ' <th>ÃèÊö</th>';
                PRINT ' </tr>';
 
                DECLARE TRows CURSOR
                FOR
                    SELECT  ' <td class="field">'
                            + CAST(clmns.name AS VARCHAR(35)) + '</td>' ,
                            ' <td>' + CAST(udt.name AS CHAR(15)) + '</td>' ,
                            ' <td>'
                            + CAST(CAST(CASE WHEN typ.name IN ( N'nchar',
                                                              N'nvarchar' )
                                                  AND clmns.max_length <> -1
                                             THEN clmns.max_length / 2
                                             ELSE clmns.max_length
                                        END AS INT) AS VARCHAR(20)) + '</td>' ,
                            ' <td>'
                            + CAST(CAST(clmns.precision AS INT) AS VARCHAR(20))
                            + '</td>' ,
                            ' <td>'
                            + CAST(CAST(clmns.scale AS INT) AS VARCHAR(20))
                            + '</td>' ,
                            ' <td>'
                            + ISNULL(CAST(cnstr.definition AS VARCHAR(20)), '')
                            + '</td>' ,
                            ' <td>'
                            + ( CASE WHEN clmns.is_nullable = 1 THEN '¡Ì'
                                     ELSE ''
                                END ) + '</td>' ,
                            ' <td>'
                            + ( CASE WHEN clmns.is_computed = 1 THEN '¡Ì'
                                     ELSE ''
                                END ) + '</td>' ,
                            ' <td>'
                            + ( CASE WHEN clmns.is_identity = 1 THEN '¡Ì'
                                     ELSE ''
                                END ) + '</td>' ,
                            ' <td style="">'
                            + ISNULL(CAST(exprop.value AS VARCHAR(500)), '')
                            + '</td>'
                    FROM    sys.tables AS tbl
                            INNER JOIN sys.all_columns AS clmns ON clmns.object_id = tbl.object_id
                            LEFT OUTER JOIN sys.indexes AS idx ON idx.object_id = clmns.object_id
                                                              AND 1 = idx.is_primary_key
                            LEFT OUTER JOIN sys.index_columns AS idxcol ON idxcol.index_id = idx.index_id
                                                              AND idxcol.column_id = clmns.column_id
                                                              AND idxcol.object_id = clmns.object_id
                                                              AND 0 = idxcol.is_included_column
                            LEFT OUTER JOIN sys.types AS udt ON udt.user_type_id = clmns.user_type_id
                            LEFT OUTER JOIN sys.types AS typ ON typ.user_type_id = clmns.system_type_id
                                                              AND typ.user_type_id = typ.system_type_id
                            LEFT JOIN sys.default_constraints AS cnstr ON cnstr.object_id = clmns.default_object_id
                            LEFT OUTER JOIN sys.extended_properties exprop ON exprop.major_id = clmns.object_id
                                                              AND exprop.minor_id = clmns.column_id
                                                              AND exprop.name = 'MS_Description'
                    WHERE   ( tbl.name = @tname_cur
                              --AND exprop.class = 1
                            )
                    ORDER BY clmns.column_id ASC;
 
                SET @i_t2 = 1;
                OPEN TRows;
                FETCH NEXT FROM TRows INTO @×Ö¶ÎÃû³Æ, @ÀàÐÍ, @³¤¶È, @ÊýÖµ¾«¶È, @СÊýλÊý, @ĬÈÏÖµ,
                    @ÔÊÐíΪ¿Õ, @Íâ¼ü, @Ö÷¼ü, @ÃèÊö;
 
--Êä³ö±íÐÐÊý¾Ý
                WHILE @@FETCH_STATUS = 0
                    BEGIN
                        PRINT ' <tr>';
                        PRINT ' <td>' + CAST(@i_t2 AS VARCHAR(10)) + '</td>';
                        PRINT @×Ö¶ÎÃû³Æ;
                        PRINT @ÀàÐÍ;
                        PRINT @³¤¶È;
                        PRINT @ÊýÖµ¾«¶È;
                        PRINT @СÊýλÊý;
                        PRINT @ĬÈÏÖµ;
                        PRINT @ÔÊÐíΪ¿Õ;
                        PRINT @Íâ¼ü;
                        PRINT @Ö÷¼ü;
                        PRINT @ÃèÊö;
                        PRINT ' </tr>';
                        FETCH NEXT FROM TRows INTO @×Ö¶ÎÃû³Æ, @ÀàÐÍ, @³¤¶È, @ÊýÖµ¾«¶È,
                            @СÊýλÊý, @ĬÈÏÖµ, @ÔÊÐíΪ¿Õ, @Íâ¼ü, @Ö÷¼ü, @ÃèÊö;
                        SET @i_t2 = @i_t2 + 1;
                    END;
                CLOSE TRows;
                DEALLOCATE TRows;
                PRINT '<tr><td colspan="11" style="text-align:right"><a href="#top">TOP¡ü</a></td></tr>'; 
                PRINT ' </table>';
                PRINT ' </div>'; 
 
                SET @i_t1 = @i_t1 + 1; 
            END; 
    END; 
PRINT ' </body>';
PRINT '</html>';
SET NOCOUNT OFF;