@@ -17,11 +17,11 @@ sp_doc - Always have current documentation by generating it on the fly in markdo
1717
1818Part of the DBA MultiTool http://dba-multitool.org
1919
20- Version: 20210629
20+ Version: 20210801
2121
2222MIT License
2323
24- Copyright (c) 2020 John McCall
24+ Copyright (c) 2021 John McCall
2525
2626Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
2727documentation files (the "Software"), to deal in the Software without restriction, including without limitation
@@ -166,11 +166,10 @@ BEGIN
166166 SELECT CONCAT(''| '', ''Collation'', '' | '', [collation_name], '' |'')
167167 FROM [sys].[databases]
168168 WHERE [name] = DB_NAME();
169- ' +
170169
171- /****************************
172- Generate markdown for tables
173- ****************************/
170+ INSERT INTO #markdown (value)
171+ VALUES (''----'');' +
172+
174173 --Variables
175174 + N'DECLARE @ObjectId INT,
176175 @IndexObjectId INT,
@@ -181,15 +180,113 @@ BEGIN
181180 DECLARE @KeyColumns NVARCHAR(MAX),
182181 @IncludeColumns NVARCHAR(MAX);';
183182
183+ /*****************************
184+ Generate markdown for schemas
185+ *****************************/
186+ --Build table of contents
187+ SET @Sql = @Sql + N'
188+ INSERT INTO #markdown (value)
189+ VALUES (CONCAT(CHAR(13), CHAR(10), ''## Schemas''))
190+ ,(CONCAT(CHAR(13), CHAR(10), ''<details><summary>Click to expand</summary>'', CHAR(13), CHAR(10)));' +
191+
192+ + N'INSERT INTO #markdown (value)
193+ SELECT CONCAT(''* ['', [name], ''](#'', REPLACE(LOWER([name]), '' '', ''-''), '')'')
194+ FROM [sys].[schemas]
195+ WHERE [schema_id] < 16384
196+ AND [name] NOT IN (''sys'', ''guest'', ''INFORMATION_SCHEMA'')
197+ ORDER BY [name] ASC;' +
198+
199+ --Object details
200+ + N'DECLARE [obj_cursor] CURSOR
201+ LOCAL STATIC READ_ONLY FORWARD_ONLY
202+ FOR
203+ SELECT [schema_id]
204+ FROM [sys].[schemas]
205+ WHERE [schema_id] < 16384
206+ AND [name] NOT IN (''sys'', ''guest'', ''INFORMATION_SCHEMA'')
207+ ORDER BY [name] ASC;
208+
209+ OPEN [obj_cursor]
210+ FETCH NEXT FROM [obj_cursor] INTO @ObjectId
211+ WHILE @@FETCH_STATUS = 0
212+ BEGIN;
213+
214+ INSERT INTO #markdown
215+ SELECT CONCAT(CHAR(13), CHAR(10), ''### '', SCHEMA_NAME(@ObjectId));' +
216+
217+ --Main Extended Property (@ExtendedProperty)
218+ + N'
219+ IF EXISTS (SELECT * FROM [sys].[schemas] AS [s] WITH(NOLOCK)
220+ INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [s].[schema_id] = [ep].[major_id]
221+ WHERE [s].[schema_id] = @ObjectId
222+ AND [ep].[minor_id] = 0 --On the object
223+ AND [ep].[class] = 3 --Schema
224+ AND [ep].[name] = @ExtendedPropertyName)
225+ BEGIN;
226+ INSERT INTO #markdown (value)
227+ VALUES (CONCAT(CHAR(13), CHAR(10), ''| '', @ExtendedPropertyName COLLATE DATABASE_DEFAULT, '' |''))
228+ ,(''| --- |'');
229+
230+ INSERT INTO #markdown (value)
231+ SELECT CONCAT(''| '', REPLACE(REPLACE(REPLACE(REPLACE(CAST([ep].[value] AS NVARCHAR(4000)), ''|'', @PipeHTMLCode COLLATE DATABASE_DEFAULT), CHAR(13) + CHAR(10), @BreakHTMLCode COLLATE DATABASE_DEFAULT), ''`'', @TickHTMLCode COLLATE DATABASE_DEFAULT), '']'', @RightBracketHTMLCode COLLATE DATABASE_DEFAULT) COLLATE DATABASE_DEFAULT, '' |'')
232+ FROM [sys].[schemas] AS [s] WITH(NOLOCK)
233+ INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [s].[schema_id] = [ep].[major_id]
234+ WHERE [s].[schema_id] = @ObjectId
235+ AND [ep].[minor_id] = 0 --On the object
236+ AND [ep].[class] = 3 --Schema
237+ AND [ep].[name] = @ExtendedPropertyName;
238+ END;';
239+
240+ --All Extended Properties (non-@ExtendedProperty)
241+ IF @AllExtendedProperties = 1
242+ BEGIN;
243+ SET @Sql = @Sql + N'
244+ IF EXISTS (SELECT * FROM [sys].[schemas] AS [s] WITH(NOLOCK)
245+ INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [s].[schema_id] = [ep].[major_id]
246+ WHERE [s].[schema_id] = @ObjectId
247+ AND [ep].[minor_id] = 0 --On the object
248+ AND [ep].[class] = 3 --Schema
249+ AND [ep].[name] <> @ExtendedPropertyName)
250+ BEGIN;
251+ INSERT INTO #markdown (value)
252+ VALUES (CONCAT(CHAR(13), CHAR(10), ''#### '', ''Extended Properties''))
253+ ,(CONCAT(CHAR(13), CHAR(10), ''| Name | Value |''))
254+ ,(''| --- | --- |'');
255+
256+ INSERT INTO #markdown (value)
257+ SELECT CONCAT(''| '', [ep].[name], '' | '', REPLACE(REPLACE(REPLACE(REPLACE(CAST([ep].[value] AS NVARCHAR(4000)), ''|'', @PipeHTMLCode COLLATE DATABASE_DEFAULT), CHAR(13) + CHAR(10), @BreakHTMLCode COLLATE DATABASE_DEFAULT), ''`'', @TickHTMLCode COLLATE DATABASE_DEFAULT), '']'', @RightBracketHTMLCode COLLATE DATABASE_DEFAULT) COLLATE DATABASE_DEFAULT, '' |'')
258+ FROM [sys].[schemas] AS [s] WITH(NOLOCK)
259+ INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [s].[schema_id] = [ep].[major_id]
260+ WHERE [s].[schema_id] = @ObjectId
261+ AND [ep].[minor_id] = 0 --On the object
262+ AND [ep].[class] = 3 --Schema
263+ AND [ep].[name] <> @ExtendedPropertyName
264+ ORDER BY [ep].[name] ASC;
265+ END;';
266+ END;
267+
268+ SET @Sql = @Sql + N'
269+ FETCH NEXT FROM obj_cursor INTO @ObjectId;
270+
271+ END;
272+ CLOSE obj_cursor;
273+ DEALLOCATE obj_cursor;' +
274+
275+ --End collapsible schema section
276+ + N'INSERT INTO #markdown
277+ VALUES (CONCAT(CHAR(13), CHAR(10), ''</details>''));';
278+ --End markdown for schemas
279+
280+ /****************************
281+ Generate markdown for tables
282+ ****************************/
184283 --Build table of contents
185284 SET @Sql = @Sql + N'
186285 IF EXISTS (SELECT 1 FROM [sys].[tables] WHERE [type] = ''U'' AND [is_ms_shipped] = 0)
187286 BEGIN
188287 INSERT INTO #markdown (value)
189- VALUES (''----'')
190- ,(CONCAT(CHAR(13), CHAR(10), ''## Tables''))
191- ,(CONCAT(CHAR(13), CHAR(10), ''<details><summary>Click to expand</summary>'', CHAR(13), CHAR(10)));
192- ' +
288+ VALUES (CONCAT(CHAR(13), CHAR(10), ''## Tables''))
289+ ,(CONCAT(CHAR(13), CHAR(10), ''<details><summary>Click to expand</summary>'', CHAR(13), CHAR(10)));' +
193290
194291 + N'INSERT INTO #markdown (value)
195292 SELECT CONCAT(''* ['', OBJECT_SCHEMA_NAME(object_id), ''.'', OBJECT_NAME(object_id), ''](#'', REPLACE(LOWER(OBJECT_SCHEMA_NAME(object_id)), '' '', ''-''), REPLACE(LOWER(OBJECT_NAME(object_id)), '' '', ''-''), '')'')
@@ -222,6 +319,7 @@ BEGIN
222319 INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [t].[object_id] = [ep].[major_id]
223320 WHERE [t].[object_id] = @ObjectId
224321 AND [ep].[minor_id] = 0 --On the table
322+ AND [ep].[class] = 1 --Object or col
225323 AND [ep].[name] = @ExtendedPropertyName)
226324 BEGIN;
227325 INSERT INTO #markdown (value)
@@ -234,6 +332,7 @@ BEGIN
234332 INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [t].[object_id] = [ep].[major_id]
235333 WHERE [t].[object_id] = @ObjectId
236334 AND [ep].[minor_id] = 0 --On the table
335+ AND [ep].[class] = 1 --Object or col
237336 AND [ep].[name] = @ExtendedPropertyName;
238337 END;';
239338
@@ -245,6 +344,7 @@ BEGIN
245344 INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [t].[object_id] = [ep].[major_id]
246345 WHERE [t].[object_id] = @ObjectId
247346 AND [ep].[minor_id] = 0 --On the table
347+ AND [ep].[class] = 1 --Object or col
248348 AND [ep].[name] <> @ExtendedPropertyName)
249349 BEGIN;
250350 INSERT INTO #markdown (value)
@@ -258,6 +358,7 @@ BEGIN
258358 INNER JOIN [sys].[extended_properties] AS [ep] WITH(NOLOCK) ON [t].[object_id] = [ep].[major_id]
259359 WHERE [t].[object_id] = @ObjectId
260360 AND [ep].[minor_id] = 0 --On the table
361+ AND [ep].[class] = 1 --Object or col
261362 AND [ep].[name] <> @ExtendedPropertyName
262363 ORDER BY [ep].[name] ASC;
263364 END;';
@@ -2033,7 +2134,6 @@ BEGIN
20332134 ,@TickHTMLCode
20342135 ,@RightBracketHTMLCode
20352136 ,@BreakHTMLCode;
2036-
20372137END;
20382138
20392139
0 commit comments