Skip to content

Commit 3996aeb

Browse files
committed
more fixes for variable length data type handling
1 parent df70a96 commit 3996aeb

File tree

1 file changed

+69
-64
lines changed

1 file changed

+69
-64
lines changed

sp_doc.sql

Lines changed: 69 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -206,32 +206,31 @@ BEGIN
206206
ELSE ISNULL([c].[name], ''N/A'')
207207
END
208208
,'' | ''
209-
,CONCAT(UPPER(type_name(user_type_id)),
210-
CASE
211-
WHEN TYPE_NAME(user_type_id) IN (N''decimal'',N''numeric'')
212-
THEN CONCAT(N''('',CAST([c].precision AS varchar(5)), N'','',CAST([c].scale AS varchar(5)), N'')'')
213-
WHEN TYPE_NAME(user_type_id) IN (''varchar'', ''char'')
214-
THEN CONCAT(N''('',CAST(max_length AS VARCHAR(10)), N'')'')
215-
WHEN TYPE_NAME(user_type_id) IN (N''time'',N''datetime2'',N''datetimeoffset'')
216-
THEN CONCAT(N''('',CAST([c].scale AS varchar(5)), N'')'')
217-
WHEN TYPE_NAME([c].user_type_id) in (N''float'')
218-
THEN CASE
219-
WHEN [c].precision = 53
220-
THEN N''''
221-
ELSE CONCAT(N''('',CAST([c].precision AS varchar(5)),N'')'')
222-
END
223-
WHEN TYPE_NAME([c].user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
224-
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
225-
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
226-
THEN N''''
227-
ELSE CONCAT(N''('',CASE
228-
WHEN [c].max_length = -1
229-
THEN N''MAX''
230-
WHEN TYPE_NAME([c].user_type_id) IN (N''nvarchar'',N''nchar'')
231-
THEN CAST([c].[max_length]/2 AS VARCHAR(10))
232-
ELSE CAST([c].max_length AS VARCHAR(10))
233-
END, N'')'')
234-
END)
209+
,CONCAT(UPPER(type_name(user_type_id))
210+
,CASE
211+
WHEN TYPE_NAME(user_type_id) IN (N''decimal'',N''numeric'')
212+
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
213+
WHEN TYPE_NAME(user_type_id) IN (''varchar'', ''char'')
214+
THEN QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
215+
WHEN TYPE_NAME(user_type_id) IN (N''nvarchar'',N''nchar'')
216+
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
217+
WHEN TYPE_NAME(user_type_id) IN (N''time'',N''datetime2'',N''datetimeoffset'')
218+
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
219+
WHEN TYPE_NAME(user_type_id) in (N''float'')
220+
THEN CASE
221+
WHEN precision = 53
222+
THEN N''''
223+
ELSE QUOTENAME(CAST(precision AS varchar(5)),''('') END
224+
WHEN TYPE_NAME(user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
225+
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
226+
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
227+
THEN N''''
228+
WHEN [is_readonly] = 1 --User defined table type
229+
THEN N''''
230+
WHEN [max_length] = -1 --Max length
231+
THEN N''(MAX)''
232+
ELSE QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
233+
END)
235234
,'' | ''
236235
,CASE [c].[is_nullable]
237236
WHEN 1
@@ -411,28 +410,31 @@ BEGIN
411410
+ N'INSERT INTO #markdown
412411
SELECT CONCAT(''| '', [c].[name]
413412
,'' | ''
414-
,CONCAT(UPPER(type_name(user_type_id)),
415-
CASE
416-
WHEN TYPE_NAME(user_type_id) IN (N''decimal'',N''numeric'')
417-
THEN CONCAT(N''('',CAST([c].precision AS varchar(5)), N'','',CAST([c].scale AS varchar(5)), N'')'')
418-
WHEN TYPE_NAME(user_type_id) IN (''varchar'', ''char'')
419-
THEN CONCAT(N''('',CAST(max_length AS VARCHAR(10)), '')'')
420-
WHEN TYPE_NAME(user_type_id) IN (N''time'',N''datetime2'',N''datetimeoffset'')
421-
THEN CONCAT(N''('',CAST([c].scale AS varchar(5)), N'')'')
422-
WHEN TYPE_NAME([c].user_type_id) in (N''float'')
423-
THEN CASE WHEN [c].precision = 53 THEN N'''' ELSE CONCAT(N''('',CAST([c].precision AS varchar(5)),N'')'') END
424-
WHEN TYPE_NAME([c].user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
425-
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',N''date'',
426-
N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
427-
THEN N''''
428-
ELSE CONCAT(N''('',CASE
429-
WHEN [c].max_length = -1
430-
THEN N''MAX''
431-
WHEN TYPE_NAME([c].user_type_id) IN (N''nvarchar'',N''nchar'')
432-
THEN CAST([c].[max_length]/2 AS VARCHAR(10))
433-
ELSE CAST([c].max_length AS VARCHAR(10))
434-
END, N'')'')
435-
END)
413+
,CONCAT(UPPER(type_name(user_type_id))
414+
,CASE
415+
WHEN TYPE_NAME(user_type_id) IN (N''decimal'',N''numeric'')
416+
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
417+
WHEN TYPE_NAME(user_type_id) IN (''varchar'', ''char'')
418+
THEN QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
419+
WHEN TYPE_NAME(user_type_id) IN (N''nvarchar'',N''nchar'')
420+
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
421+
WHEN TYPE_NAME(user_type_id) IN (N''time'',N''datetime2'',N''datetimeoffset'')
422+
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
423+
WHEN TYPE_NAME(user_type_id) in (N''float'')
424+
THEN CASE
425+
WHEN precision = 53
426+
THEN N''''
427+
ELSE QUOTENAME(CAST(precision AS varchar(5)),''('') END
428+
WHEN TYPE_NAME(user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
429+
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
430+
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
431+
THEN N''''
432+
WHEN [is_readonly] = 1 --User defined table type
433+
THEN N''''
434+
WHEN [max_length] = -1 --Max length
435+
THEN N''(MAX)''
436+
ELSE QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
437+
END)
436438
,'' | ''
437439
,CASE [c].[is_nullable]
438440
WHEN 1
@@ -536,7 +538,7 @@ BEGIN
536538
WHEN TYPE_NAME(user_type_id) IN (N''decimal'',N''numeric'')
537539
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
538540
WHEN TYPE_NAME(user_type_id) IN (''varchar'', ''char'')
539-
THEN QUOTENAME(CAST(max_length AS VARCHAR(10)))
541+
THEN QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
540542
WHEN TYPE_NAME(user_type_id) IN (N''nvarchar'',N''nchar'')
541543
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
542544
WHEN TYPE_NAME(user_type_id) IN (N''time'',N''datetime2'',N''datetimeoffset'')
@@ -656,11 +658,11 @@ BEGIN
656658
select CONCAT(''| '', CASE WHEN LEN([param].[name]) = 0 THEN ''*Output*'' ELSE [param].[name] END
657659
,'' | ''
658660
,CONCAT(UPPER(type_name(user_type_id))
659-
,CASE
661+
,CASE
660662
WHEN TYPE_NAME(user_type_id) IN (N''decimal'',N''numeric'')
661663
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
662664
WHEN TYPE_NAME(user_type_id) IN (''varchar'', ''char'')
663-
THEN QUOTENAME(CAST(max_length AS VARCHAR(10)))
665+
THEN QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
664666
WHEN TYPE_NAME(user_type_id) IN (N''nvarchar'',N''nchar'')
665667
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
666668
WHEN TYPE_NAME(user_type_id) IN (N''time'',N''datetime2'',N''datetimeoffset'')
@@ -783,22 +785,25 @@ BEGIN
783785
WHEN TYPE_NAME(user_type_id) IN (N''decimal'',N''numeric'')
784786
THEN CONCAT(N''('',CAST(precision AS varchar(5)), N'','',CAST(scale AS varchar(5)), N'')'')
785787
WHEN TYPE_NAME(user_type_id) IN (''varchar'', ''char'')
786-
THEN CAST(max_length AS VARCHAR(10))
788+
THEN QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
789+
WHEN TYPE_NAME(user_type_id) IN (N''nvarchar'',N''nchar'')
790+
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
787791
WHEN TYPE_NAME(user_type_id) IN (N''time'',N''datetime2'',N''datetimeoffset'')
788-
THEN CONCAT(N''('',CAST(scale AS varchar(5)), N'')'')
792+
THEN QUOTENAME(CAST(scale AS varchar(5)), ''('')
789793
WHEN TYPE_NAME(user_type_id) in (N''float'')
790-
THEN CASE WHEN precision = 53 THEN N'''' ELSE CONCAT(N''('',CAST(precision AS varchar(5)),N'')'') END
791-
WHEN TYPE_NAME(user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
794+
THEN CASE
795+
WHEN precision = 53
796+
THEN N''''
797+
ELSE QUOTENAME(CAST(precision AS varchar(5)),''('') END
798+
WHEN TYPE_NAME(user_type_id) IN (N''int'',N''bigint'',N''smallint'',N''tinyint'',N''money'',N''smallmoney'',
799+
N''real'',N''datetime'',N''smalldatetime'',N''bit'',N''image'',N''text'',N''uniqueidentifier'',
800+
N''date'',N''ntext'',N''sql_variant'',N''hierarchyid'',''geography'',N''timestamp'',N''xml'')
801+
THEN N''''
802+
WHEN [is_readonly] = 1 --User defined table type
792803
THEN N''''
793-
ELSE CASE
794-
WHEN [is_readonly] = 1 --User defined table type
795-
THEN N''''
796-
WHEN [max_length] = -1
797-
THEN N''(MAX)''
798-
WHEN TYPE_NAME(user_type_id) IN (N''nvarchar'',N''nchar'')
799-
THEN QUOTENAME(CAST([max_length]/2 AS VARCHAR(10)), ''('')
800-
ELSE QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
801-
END
804+
WHEN [max_length] = -1 --Max length
805+
THEN N''(MAX)''
806+
ELSE QUOTENAME(CAST(max_length AS VARCHAR(10)), ''('')
802807
END)
803808
,'' | ''
804809
,CASE [is_output]

0 commit comments

Comments
 (0)